在 oslo_messaging 中添加 Kafka 驱动程序用于通知¶
https://blueprints.launchpad.net/oslo.messaging/+spec/adding-kafka-support
Apache Kafka 是一种消息代理,它能够建立良好的日志为中心的通信总线,用于 OpenStack。
问题描述¶
Ceilometer 和 Monasca 等一些 OpenStack 服务与 Apache Kafka 分布式消息系统进行协作,以发布和订阅日志和指标数据。由于 Kafka 是一个设计良好的日志为中心的消息代理,因此预计在现有或未来的 OpenStack 项目中会出现新的 Kafka 相关实现。此蓝图旨在在 oslo_messaging 中实现 kafka 驱动程序,这使我们能够减少重新实现相同功能的浪费时间,并且由于 Kafka 将拥有来自不同项目的多个客户端,因此使用相同的客户端与 Kafka 通信将减少实现相关的错误和缺陷。
提议的变更¶
为了降低独立实现 kafka 通信功能的成本,让我们在 oslo_messaging 中支持 kafka 驱动程序。Kafka 驱动程序使我们能够像其他 oslo_messaging 驱动程序一样发布和订阅消息,但将不支持 RPC 方法,因为 Kafka 不预计用作 RPC 代理。如果将来有 Kafka RPC 的需求,将提出新的建议。
备选方案¶
目前有几个消息代理不被 oslo_messaging 支持,例如 NATS、NSQ 等。但是,Kafka 已经被多个 OpenStack 项目使用,并且由于 Kafka 是为处理高负载日志而开发的,Kafka 具有一些更适合日志数据的特性。例如,Kafka 队列会保留配置时间段内的消息。这意味着当队列的消费者在订阅后丢失消息时,他们可以重放相同的消息。此外,由于 Zookeeper 支持 Kafka 的水平扩展,因此可以轻松地添加额外的 kafka 代理和消费者。此外,kafka 可以一起发送一堆消息,这可以提高消息传递的性能和灵活性。
Impact on Existing APIs¶
无
安全影响¶
Kafka 的当前安全支持正在实施中。客户端身份验证和连接加密即将到来。更多信息请参见参考资料。
性能影响¶
除非选择使用 kafka,否则不会有影响。整体性能将取决于设置代理的服务器组件。与 Kafka 相关的论文指出,在消息大小为 200 字节且消息逐个发送的情况下,生产者可以发布大约 50,000 条消息/秒。但是,此数字受消息大小、复制数量、批处理大小(kafka 可以一起发送多条消息)和环境等参数影响。粗略地说,RabbitMQ 可以发布大约 10,000 条消息/秒,这意味着 kafka 可能不会成为性能的瓶颈。
Configuration Impact¶
无
开发人员影响¶
无
Testing Impact¶
无
实现¶
负责人¶
- 主要负责人
<kshimamu>
- 其他贡献者
<yudupi>
<dedutta>
里程碑¶
- 完成目标里程碑
liberty
工作项¶
Kafka 驱动程序的集成测试环境 - 向 OpenStack 基础设施添加集成测试代码
为 oslo_messaging 创建 Kafka 驱动程序 - 提供与 Kafka 的通信路径
Kafka 驱动程序的文档 - 修改 OpenStack 开发人员文档
孵化¶
无
采用¶
目前 Ceilometer 和 Monasca 正在使用 Kafka 服务。Ceilomter 项目将 Kafka 发布者作为指标发布者,Monasca 项目将其架构的一部分用作 kafka。有关更多详细信息,请参阅参考章节。
库¶
oslo_messaging
预计 API 稳定¶
无
文档影响¶
oslo_messaging 库的 OpenStack 开发人员文档将包含有关行为以及如何选择 kafka 驱动程序插件的描述。
依赖项¶
Kafka python 包
参考资料¶
Apache Kafka 项目
Kafka:用于日志处理的分布式消息系统
Kafka 安全
KAFKA 0.8 PRODUCER PERFORMANCE
Kafka 的性能
RabbitMQ 性能基准测试
消息队列的比较
注意
本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode