假设我有一个主题有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知道这是非常常见的问题
OR
如果Kafka没有提供任何支持,那么一般如何解决这个问题......有没有解决方案的设计模式?
答案 0 :(得分:0)
Kafka不会为你做那件事 - 你需要为此开发自己的逻辑。是的,这是一个常见的问题,但在某些方面,你要做的事情与卡夫卡的设计目标背道而驰。如需大开眼界,请参阅Kafka设计的一些背景 here 。
具体来说,请阅读“不要害怕文件系统”一节。通过构建(我假设复杂的)内存数据结构来维持状态,使您的问题变得更加困难。为什么不将该状态记录到Kafka,然后消费者可以在前一个消费者离开的地方找到它?
一旦你的想法成为 - 首先我把数据放在Kafka中,然后我在我的应用程序中使用它 - 那么这意味着你所有的消费者都可以访问相同的数据。内存缓存中没有“私有”。而你的问题解决起来要简单得多。