在 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