我有一个场景,其中生产者生成有限的数量的消息,以及一组属于消费者组的消费者使用和处理消息。
向所有传递生产者已经完成有限消息排队的消费者的理想方式是什么?我在想下面的方法
卡夫卡是否有任何内在特征来实现这一目标?
发布于 2017-10-23 11:15:59
Kafka没有提供任何功能来实现这一点,因为它主要面向流用例。
我认为你的想法是朝着正确的方向发展的,你需要以某种方式使制片人能够与消费者直接沟通,如何实现这一目标当然会有很多种可能性:
然而,对于所有这些方法,都要记住一些绊脚石。
分区
如果您的主题有几个分区,您就不能简单地向主题发送一条已完成的消息,因为这将只分配给其中一个分区。由于排序只能保证每个分区,所以消费者在处理来自其他主题的消息之前完全有可能读取已完成的消息,这些主题也应该被读取并停止处理。在这种情况下,您需要确保向每个分区发送一个完成事件,并且您的使用者也需要知道这个概念,并继续阅读,直到它为每个订阅的分区得到一条完成消息。
复制
如果您选择使用外部触发器,您可能需要告诉您的使用者在完成之前要接收多少个事件。但是,在有些情况下,如果使用者在提交读偏移量之前崩溃,那么它可能会读取两次消息--例如,在这种情况下,仅仅发送多个发送值的消息是不够的,因为这些重复项将意味着您正在忽略最后的消息。与第一个想法一样,您希望将生产者为每个分区发送的最后一个偏移量发送给您的使用者,以便它知道要读取的偏移量,直到每个分区。
https://stackoverflow.com/questions/46887639
复制相似问题