Kafka:Kafka是否为应用程序级别的状态转换提供支持?

时间:2016-04-18 06:47:05

标签: apache-kafka messaging kafka-producer-api advanced-queuing kafka-python

假设我有一个主题有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没有提供任何支持,那么一般如何解决这个问题......有没有解决方案的设计模式?

1 个答案:

答案 0 :(得分:0)

Kafka不会为你做那件事 - 你需要为此开发自己的逻辑。是的,这是一个常见的问题,但在某些方面,你要做的事情与卡夫卡的设计目标背道而驰。如需大开眼界,请参阅Kafka设计的一些背景 here

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

一旦你的想法成为 - 首先我把数据放在Kafka中,然后我在我的应用程序中使用它 - 那么这意味着你所有的消费者都可以访问相同的数据。内存缓存中没有“私有”。而你的问题解决起来要简单得多。