我们开始使用 Apache Kafka 将 Timeseries 数据保存到 Timeseries 数据库中。我们一开始只是有一个主题,一个生产者写入该主题,一个消费者读取该主题并将数据转储到 Timeseries 数据库。
我们有 3 个代理实例,我们在第一次尝试中注意到生产者向主题写入消息的速度非常快。大约 30 分钟内,我们收到了大约 150 万条消息。消费者每秒只处理 300 条消息。
我们的下一个方法是对主题进行分区并拥有更多消费者实例(等于分区数量)。这无疑提高了消费者的写入速度。现在我的问题是:
如果我将主题分区设置为 6,但我只有 3 个代理实例,会发生什么情况。哪个代理实例将成为分区 1 到 6 的领导者?
是否有一个公式可以确定我需要多少个分区?由于这是我们的测试环境,因此我们可以使用它并对其进行扩展。我们可能无法在生产环境中执行相同的操作。那么如何确定分区大小呢?
分区分布在您的经纪人之间。不可能知道哪个代理将被选为给定分区的领导者——而且它可能会随着时间的推移而改变。根据您使用的 Kafka 版本和 Consumer API,您的消费者可能会也可能不会自行发现分区领导者。您必须SimpleConsumer自己找到分区领导者,并在代码中响应新的领导者选举(而不是由 API 自动处理)。
至于分区的数量——除此之外没有真正的“公式”:并行度不能超过分区的数量。如果你有 4 个分区和 5 个消费者,那么其中一个消费者就会挨饿。我通常使用 12 或 60 或其倍数等数字来表示大型主题的分区数量。可以轻松、干净地划分不同数量的消费者。
另请注意,您可以稍后更改分区数量,但需要注意一些注意事项。请参阅此答案以了解注意事项的方式和内容。
| 归档时间: |
|
| 查看次数: |
5289 次 |
| 最近记录: |