Kafka - 同步消费者群体

时间:2017-09-27 09:34:17

标签: apache-kafka

我正试图了解Kafka消费者,我想知道使用Kafka是否可以解决以下用例。

我的用例基本上就是这个:

我有一个流,我希望由几个消费者同步使用。换句话说,我有第一个消费者开始消费流,然后另一个消费者到达。我希望第二个消费者开始消费当前第一个消费者的偏移量。

我知道我需要让消费者分成两组。但我不清楚:

  • 关于如何或是否可以协调组偏移量
  • 如果我希望这种协调任务有延迟

2 个答案:

答案 0 :(得分:1)

您不需要两个不同的组,所有消费者都可以查看一个主题。或者就他们所喜欢的那样多。

<强>偏移

消息通常由他们的到达日期标识,因此所有客户都需要告诉制作人“我上次访问是在10:00,给我所有新消息”。因此,每个客户需要跟踪的是最后检查哪个单独主题的时间。

<强>延迟

在这一点上,这是一种“范围”。当然会有延迟,但它取决于环境,如“有多少消费者”,“有多少主题”,“消息格式”等。

您可以使用kafka解析您的用例

简而言之:是的。 “一个消费者可以在另一个消费者离开的地方继续”,消费者可以在彼此之间交换最新的索引,当然这需要一些内部同步。卡夫卡本身并不关心消费者,所以它不会跟踪最新的指数。你需要做的工作。另一种可能性是实际使用消息(比如,一旦消耗它们就从队列中删除它们),所以每当另一个消费者点击队列时,它就会保证接收另一个消费者留下的消息。当然这取决于你的用例,你真的可以从队列中删除你的消息。

答案 1 :(得分:0)

这不是由kafka直接处理的问题(消费者群体是在成员之间分配分区,而不是归属于相同的偏移量),但是你可以为此做些什么。您可以简单地创建另一个主题,其中consumer1将发布消息的偏移量或副本(因此您需要bth使用者和生产者),而您的其他同步消费者会对此做出反应 - 当然会有一些延迟对此。

这背后的用例是什么?为什么你不能以不同的偏差消费?难道你不想拥有一个消费者,然后将消息读取到不同的进程,以便它们确实同步? (没有延迟)

您对synchronized的意思是什么:如果consumer2(以及3和更多)只使用与consumer1相同的消息(即不能消耗更快,我在以前的解决方案中都假设)虽然这是可能的,但它会真的更好地了解背后的原因,也许有更好的方法来处理数据