我们开始使用Apache Kafka将Timeseries数据持久存储到Timeseries数据库中。我们开始的是只有一个主题,一个生成器写入此主题,一个消费者从该主题读取并将数据转储到Timeseries数据库。
我们有3个代理实例,我们在第一次尝试时注意到,生产者在向主题撰写消息时非常快。在30分钟内,我们有大约150万条消息。消费者每秒只做300条消息。
我们的下一个方法是对主题进行分区并拥有更多的消费者实例(等于分区数)。这肯定改善了消费者的写入速度。现在我的问题是:
如果我将主题分区设置为6会发生什么,但我只有3个代理实例。哪个代理实例将成为分区1到6的领导者?
是否有公式来确定我需要多少个分区?由于这是我们的测试环境,我们可以使用它并进行扩展。我们可能无法在生产环境中执行相同操作。那么如何确定分区大小?
答案 0 :(得分:2)
分区在您的经纪人之间分配。要知道哪个经纪人将被选为特定分区的领导者是不可能的 - 而且它可以随着时间的推移而改变。根据您使用的Kafka版本和使用的Consumer API,您的消费者可能会也可能不会自己发现分区领导者。使用SimpleConsumer
,您必须自己找到分区负责人,并在代码中响应新的领导者选举(而不是自动处理API)。
关于分区的数量 - 没有真正的"公式"除此之外:你没有比分区更多的并行性。如果您有4个分区和5个消费者,其中一个消费者会饿死。我通常使用12或60或其倍数作为大型主题的分区数。在可变数量的消费者中轻松和干净地划分的东西。
另外,请注意您稍后可以更改分区数量,但需要注意一些事项。有关注意事项的方式和内容,请参阅this answer。