apache-kafka - 将分区添加到现有 Kafka 主题对生产者/消费者行为的影响
问题描述
当一个新的分区被添加到一个现有的主题时,生产者和消费者如何适应这种变化,以及将新分区分配给代理的策略是什么?
解决方案
对于生产者
生产者将相当无缝地适应分区的添加。
假设您目前有 5 个分区,并且您决定再添加 2 个分区 - 如果您的生产者正在为以下分区生成数据:
- 循环方式,然后它现在会将您的消息循环到 7 个分区而不是 5 个。
- 键控方式(即具有相同键的消息最终在同一分区中),然后键到分区的映射将调整。
对于消费者
另一方面,消费者可能不适应,确切的行为将在很大程度上取决于消费者在消费者群体中的实际设置。
让我们使用与上面相同的示例,即具有 5 个分区的主题,并且您要再添加 2 个分区,您的消费者将:
- Adapt,如果您的消费者的功能是通用的并且在语义上不依赖于任何特定的键,例如:
- 如果您使用的是RoundRobinAssignor并且每个消费者都可以从任何分区自由消费
- 如果您使用的是 FailoverAssignor(如本文所述)并且组中只有一个使用者会主动使用
- 可能还有更多这样的场景……
- 不适应,如果您的消费者实例的功能在很大程度上依赖于传入消息的键,即消费者实例必须仅使用某个键来消费消息。对于此类主题,强烈建议在创建时设置分区,避免以后调整大小(参考:Kafka权威指南-第9章管理Kafka->主题操作->添加分区)。
我只是试图用上面的例子来支持解释,但可能还有更多的场景。
希望这可以帮助!
推荐阅读
- python - Python 驱动程序 - webelement.send_keys(Keys.RETURN) 不发送回车键
- c# - How to add Search Functionality to a dropdownlist in asp.net using Select2.js
- c# - Dapper 将我的日期转换为 01-Jan-01,我不明白为什么?
- angular - 列在pdfmake上被切断
- apache-spark - 使用 spark.shuffle.service.enabled 属性启动工作者
- r - R Function involving two for loops - baseball data
- database - SSMS 不记录应用程序数据
- r - 将 Python 创建的 CSV(制表符分隔)文件读取到 R 时发生错误
- c++ - 学生输入数据未永久存储在 C++ 中的 dat 文件中
- mysql - 从数据库中清除垃圾邮件的正确方法