Kafka - 同一组/主题上的多个消费者(只有一个活跃的)

Joh*_*0te 4 apache-kafka mapr-streams

是否有可能让应用程序的多个副本听同一个Kafka组/主题,以便一次只能读取一个,但如果主应用程序崩溃/停止读取,其他的将开始工作?

我需要使应用程序具有高可用性,但不能容忍通过多个副本主动运行将应用程序另一端的数据存储流量加倍.

仅供参考 - 从技术上讲,我正在使用MapR流,但它遵循Kafka API和功能,以防任何人知道MapR流特定功能有助于这种情况.

Gua*_*Zuo 6

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

因此,您可以将主题设置为只有一个分区,然后只有一个消费者使用消息,其他消费者将闲置.消费者关闭后,它将触发组重新平衡操作:kafka将再次执行分区分配.然后在你的情况下,一个新的消费者将继续这项工作.它将处理来自旧消费者提交的最后提交的偏移量的消息.

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