0

假设我有一个主题,有 6 个分区和 2 个消费者,其中 P1、P2、P3 由 C1 处理,P4、P5、P6 由 C2 处理。假设用户数据 U1 总是到 P1,U2 到 P2,依此类推。

所以,

C1 maintains state of users U1, U2, U3
C2 maintains state of users U4, U5, U6.

现在让我们说我们添加了一个消费者 C3,所以重新平衡发生了,现在

P1, P2, P3 -> C1
P4, P5 -> C2
P6 -> C3

所以我的应用程序在 C2 中维护用户 U6 状态,但现在 U6 数据正在流向 C3

现在在这里不知何故,来自 C2 的 U6 状态应该流向 C3。那么这是如何在 Kafka 中实现的,知道它非常常见的问题

或者

如果Kafka不提供任何支持,那么这个问题一般是如何解决的……有没有设计模式来解决它?

4

1 回答 1

0

Kafka 不会为你做这些——你需要为此开发自己的逻辑。是的,这是一个常见问题,但在某些方面,您要做的事情与 Kafka 的设计目标背道而驰。想要大开眼界,请在此处查看有关 Kafka 设计的一些背景信息。

具体来说,请阅读“不要害怕文件系统”部分。通过构建(我假设是复杂的)内存数据结构来维护状态,您正在使您的问题变得更加困难。为什么不将该状态记录到 Kafka,然后消费者可以从前一个消费者停止的地方继续?

一旦你的想法变成——首先我将数据放入 Kafka,然后我在我的应用程序中使用它——那么这意味着你的所有消费者都可以访问相同的数据。内存缓存中没有“私有”。你的问题更容易解决。

于 2016-04-18T13:03:18.590 回答