2016-11-19 66 views
3

请耐心等待。我对卡夫卡很新。 我正在研究生产者可以在运行时出现的项目(不是固定数量)并发布消息。目前,他们发布到在kafka代理运行时创建的独特主题(topic.uuid),另一端有一个消费者订阅topic。* pattern并订阅所有主题,并在新主题进入时重新平衡。这是正确的方法吗?卡夫卡话题数量与分区数量

现在,我很困惑,我们应该有一个主题与多个分区或多个主题与一个分区each.Technically,它是一样的。但是,为了达到更高的吞吐量,在每个分区(在运行时)获得新分区(在运行时)以及新消费者需要的复杂性是多少,因为在各个博客中提到分区数应该具有相同数量的消费者在一组。

+0

见http://stackoverflow.com/questions/39735910/kafka-topic-per-producer/39759078#39759078 –

回答

10

主题应该从功能的角度来看待。您可以拥有多个主题,每个主题都针对特定的消息系列。

例如你可以有分析重要消息和 另一个话题与日志压实批量加载/备份的话题,得到细粒度每个记录保留政策。

分区从技术/架构的角度来看很有趣。卡夫卡是一个分布式系统。一个主题可以有多个分区。当你有多个Kafka经纪人时,每个经纪人都会得到一组他们负责的分区。

例如,如果你有24个分区的话题,你产卵3个卡夫卡 经纪人,每个人负责的分区8。 Kafka 和Zookeeper将负责照顾这些 分区的负载分布,并在经纪人 宕机的情况下正确地重新分配分区。

消费者可以从这些分区中读取,并将从领导代理读取。如果用户组中有多个用户,则这些用户将分配他们读取的分区。

例如如果您在消费群比主题分区有更多的消费者,一些消费者将永远不会得到任何消息。

+1

具体的“过剩”的消费者在一组永远不会得到任何消息......直到之一活跃的消费者崩溃。 –