如何与kafka消费者沟通Kafka制作人是否完整?

时间:2017-10-23 10:55:04

标签: apache-kafka

我有一个场景,生产者生成有限个消息,属于消费者群体的一组消费者使用和处理消息。

所有消费者进行沟通的理想方式是生产者已完成对有限消息集的排队?我在考虑以下方法

  1. 向所有消费者广播COMPLETE消息
  2. 生产者更新外部数据库/文件中的状态
  3. Kafka中是否有隐含的功能来实现它?

1 个答案:

答案 0 :(得分:2)

Kafka没有提供实现此功能的功能,因为它主要面向流式用例。

我认为您的想法朝着正确的方向前进,您需要以某种方式让生产者直接与消费者沟通,如何实现这一点当然可以有很多可能性:

  • 更新外部文件/ db
  • 让消费者接听休息电话
  • 写一个关于Kafka主题的元事件,消费者忽略了该主题,但是发出信号流的结尾
  • ...

但是,对于所有这些方法,要记住一些绊脚石。

<强>分区

如果您的主题有多个分区,则不能简单地向主题发送一条 done 消息,因为这将只分配给其中一个分区。由于每个分区仅保证排序,因此消费者在处理来自应该已读取的其他主题的消息并停止处理之前读取完成消息是完全可能的。对于这种情况,您需要确保将完成事件发送到每个分区,并且您的消费者也需要了解此概念并继续阅读,直到它为每个订阅获得完成消息分区。

重复

如果您选择使用外部触发器,则可能需要告诉您的消费者在完成之前要接收多少事件。在某些情况下,消费者可能会读取消息两次,如果它在提交读取偏移之前崩溃,例如,在这种情况下简单地发送发送的消息数值是不够的,因为这些重复将意味着你最后忽略了消息。 就像第一个想法一样,您可能希望将生产者为每个分区发送的最后一个偏移量传输给您的消费者,以便它知道要读取的偏移量,直到每个分区。