Kafka从多节点消耗单个主题

时间:2018-01-21 22:30:43

标签: java apache-kafka apache-zookeeper kafka-consumer-api

我有一个Kafka消费者应用程序在两个不同的设备上运行,尝试使用相同的主题topic x,每个设备都有自己的代理。两个经纪人连接到同一个动物园管理员。

enter image description here

这种架构与卡夫卡有关吗?我可以在不同设备上使用不同代理的相同主题吗?我正在尝试实现此功能,但我收到此错误LEADER_NOT_AVAILABLE

1 个答案:

答案 0 :(得分:1)

在卡夫卡,经纪人不会消费主题。经纪人共同合作形成一个集群,作为一个整体,托管并提供潜在的多个主题,同时提供复制和高可用性。经纪人接收并存储由生产者发送到每个特定主题的消息,并允许消费者使用具有各种语义的那些主题消费(参见“消费者群体”)。

我不确定您正在处理哪些设备,但典型的设置是拥有一个Kafka代理群集(由ZooKeeper群集支持),并让您的应用程序,生产者和消费者通过以下方式连接到此Kafka群集:给他们经纪人的主机名列表。

根据您的需求,主题数量,生产者/消费者数量等,您可以调整ZooKeeper和Kafka群集的大小。一个好的开始是每个3个,所以你至少可以通过丢失一个节点而不丢失数据来获得一定的高可用性。对于开发或只是玩游戏,由单节点ZooKeeper集群支持的单代理Kafka集群可以正常工作。

最后,如果您有多个设备正在使用同一主题,则必须决定是否希望它们接收相同的消息,或者您是否希望它们共享负载。如果是第一种情况,您需要确保它们作为两个不同的消费者群体消费。对于后者,您需要确保它们位于同一个消费者群组中,这样他们就不会收到相同的消息。

要了解详情,请查看Kafka的Introduction文档。