升级 Apache Kafka 客户端¶
包含您的故事的 URL
https://storyboard.openstack.org/#!/story/2003705
目前所有 Python Monasca 组件都使用了版本为 0.9.5(发布于 2016 年 2 月 16 日)的 kafka-python 库 1。 本规范描述了将 Apache Kafka 客户端升级到 confluent-kafka-python 2 的过程。 这将提高性能和可靠性。 坚持使用旧的冻结客户端版本在安全性方面也是不可接受的。
问题描述¶
kafka-python 库中的 KeyedProducer 和 SimpleConsumer 自版本 1.0.0 起已被弃用 3。 继续使用此代码存在安全风险。 此外,对 monasca-persister 的性能分析表明,大部分时间都花在消费 Kafka 消息上 7。 因此,通过升级使用的 Kafka 客户端,可以大大提高 Monasca 的整体性能。
提议的变更¶
Apache Software Foundation 托管的 wiki 页面列出了可用的 Python 客户端 4。 目前有三个处于积极维护和支持状态的客户端:confluent-kafka-python、kafka-python 和 pykafka。 多个基准测试表明 5, 6,由 Confluent 维护的客户端既最快又最完整。
使用异步生产者可以显著提高性能(约 50 倍)。 以异步方式发送消息需要更加小心,以避免重复持久化数据,但性能提升证明了这一点。
confluent-kafka-python 也是唯一提供对 Apache Avro 序列化支持的客户端,这可以减少消息的大小,从而进一步加快通信速度。
提议的更改包括使用
confluent-kafka-python 库
以异步模式
代码更改将影响以下组件
monasca-common
monasca-{log,event}-api
monasca-persister
monasca-notification
monasca-transform
Java 组件(monasca-thresh 和 monasca-persister)不在本规范的范围内。 这些组件中的客户端升级应单独处理。
此客户端对 librdkafka 有外部依赖,这是一个经过微调的 C 客户端。
备选方案¶
pykafka
kafka-python 的新版本
使用同步模式
数据模型影响¶
没有数据模型影响。
REST API 影响¶
对 REST API 无影响。
安全影响¶
此更改将提高安全性,因为删除了已弃用且未维护的代码。
其他最终用户影响¶
对最终用户无影响。
性能影响¶
此更改应显著提高整个解决方案的性能。 尤其是 monasca-persister 和 monasca-api 的性能预计将得到改善。
其他部署者影响¶
应打包和部署新库
confluent-kafka-python
librdkafka
开发者影响¶
在所有受影响的组件中,必须使用 confluent-kafka-python 代替 kafka-python。
实现¶
负责人¶
- 主要负责人
witek
- 其他贡献者
<>
工作项¶
删除使用 pykafka 的代码
从 requirements 和 lower-constraints 中删除 pykafka
将 confluent-kafka-python 添加到 global-requirements
在
monasca-common中实现通用例程在新代码中使用
monasca-{log,events}-api
monasca-persister
monasca-notification
monasca-transform
删除旧的已弃用代码
依赖项¶
必须为以下组件构建新软件包
confluent-kafka-python
librdkafka
测试¶
我们应该使用现有的集成测试(tempest)测试实现。 此外,我们应该测试生产者未能从 Kafka 接收到某些批量消息响应的场景。 应避免在数据库中创建重复条目。
实施后,应在整个堆栈上执行以下测试
压力测试
耐久性测试
性能测试
文档影响¶
对文档无影响。
参考资料¶
- 1
- 2
- 3
https://github.com/dpkp/kafka-python/blob/master/docs/changelog.rst#100-feb-15-2016
- 4
https://cwiki.apache.org/confluence/display/KAFKA/Clients#Clients-Python
- 5
- 6
http://activisiongamescience.github.io/2016/06/15/Kafka-Client-Benchmarking/
- 7
https://opendev.org/openstack/monasca-persister/commit/a7112fd30bd545dd850e0e267dcceb9ea27551ad
历史记录¶
发布名称 |
描述 |
|---|---|
Stein |
引入 |