升级 Apache Kafka 客户端

包含您的故事的 URL

https://storyboard.openstack.org/#!/story/2003705

目前所有 Python Monasca 组件都使用了版本为 0.9.5(发布于 2016 年 2 月 16 日)的 kafka-python1。 本规范描述了将 Apache Kafka 客户端升级到 confluent-kafka-python 2 的过程。 这将提高性能和可靠性。 坚持使用旧的冻结客户端版本在安全性方面也是不可接受的。

问题描述

kafka-python 库中的 KeyedProducerSimpleConsumer 自版本 1.0.0 起已被弃用 3。 继续使用此代码存在安全风险。 此外,对 monasca-persister 的性能分析表明,大部分时间都花在消费 Kafka 消息上 7。 因此,通过升级使用的 Kafka 客户端,可以大大提高 Monasca 的整体性能。

提议的变更

Apache Software Foundation 托管的 wiki 页面列出了可用的 Python 客户端 4。 目前有三个处于积极维护和支持状态的客户端:confluent-kafka-pythonkafka-pythonpykafka。 多个基准测试表明 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-threshmonasca-persister)不在本规范的范围内。 这些组件中的客户端升级应单独处理。

此客户端对 librdkafka 有外部依赖,这是一个经过微调的 C 客户端。

备选方案

  • pykafka

  • kafka-python 的新版本

  • 使用同步模式

数据模型影响

没有数据模型影响。

REST API 影响

对 REST API 无影响。

安全影响

此更改将提高安全性,因为删除了已弃用且未维护的代码。

其他最终用户影响

对最终用户无影响。

性能影响

此更改应显著提高整个解决方案的性能。 尤其是 monasca-persistermonasca-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

https://github.com/dpkp/kafka-python/releases/tag/v0.9.5

2

https://github.com/confluentinc/confluent-kafka-python

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

https://github.com/monasca/monasca-perf/blob/master/kafka_python_client_perf/monascaInvestigationKafkaPythonAPIs.md

6

http://activisiongamescience.github.io/2016/06/15/Kafka-Client-Benchmarking/

7

https://opendev.org/openstack/monasca-persister/commit/a7112fd30bd545dd850e0e267dcceb9ea27551ad

历史记录

修订

发布名称

描述

Stein

引入