2017-09-05 138 views
2

是否可以让应用程序的多个副本倾听同一个Kafka群组/主题,以便每次只有一个人正在阅读它,但其他人将开始工作,如果主要崩溃/停止阅读?Kafka - 同一群组/主题上的多个消费者(只有一个活动人)

我需要使应用程序具有高度可用性,但无法容忍将应用程序另一端的数据存储的流量翻倍,因为有多个副本正在运行。

仅供参考 - 从技术上讲,我使用MapR流,但它坚持Kafka API和功能,以防有人知道MapR流特定功能可以帮助解决问题。

回答

4

这是可能的。如果多个消费者在同一个消费群体中,那么当该群体订阅一个主题时,kafka将为您的消费者执行分区分配工作:一个分区只能由同一组中的一个消费者消费。

所以你可以设置你的主题只有一个分区,那么只有一个消费者使用消息,其他人将闲置。一旦消费者关闭,它将触发组重新平衡操作:kafka将再次执行分区分配。然后就你的情况来说,一个新的消费者会继续这项工作。它将处理来自旧消费者提交的上次提交的偏移的消息。

如果您的案例支持并行处理,您可以让许多进程(应用程序)执行相同的工作并将主题设置为多分区。他们将被分配使用不同的分区并处理不同的消息。所以它会加快你的流程,也可以容忍失败。如上所述,如果一些消费者失败了,卡夫卡会为您保管它,它会将他们的分配分配给其他工作的消费者。所以一切都会好的。

+1

太棒了。我只是在我看到的这个汇合页面上看到它:)。 https://cwiki.apache.org/confluence/display/KAFKA/Consumer+Group+Example。谢谢您的回答! –

相关问题