Kafka Driver Revisions for Messaging Notifications¶
https://blueprints.launchpad.net/oslo.messaging/+spec/update-kafka-support
本文档规范提出了对现有 kafka 驱动程序的修改,允许通过 Apache Kafka 分布式流平台传输通知消息 [1]。原始驱动程序实现的蓝图可以在这里找到 [2],实现规范可以在这里找到 [3]。 本规范中描述的修改目标是将驱动程序的状态从“实验性”过渡到“受支持”状态,以鼓励驱动程序的采用。该驱动程序将(继续)仅支持通知消息,因为 kafka 服务器对于 RPC 消息模式而言并非最佳选择。因此,此 kafka 驱动程序旨在在混合消息配置中部署,其中 RPC 消息将由单独的消息后端提供。
问题描述¶
原始 kafka 驱动程序是在 mitaka 发布周期中引入的。由于诸如其“实验性”状态以及仅用于通知消息等因素,该驱动程序的采用受到限制。与此同时,kafka 服务器已得到广泛采用,并且经常包含在应用程序架构中,以在云监控系统中提供准确的分析。这种成功以及配置框架的进步,可以轻松地实现 OpenStack 中的混合消息部署,从而推动我们修改此驱动程序并继续提供主动维护和支持。
Kafka 混合 oslo.messaging 部署
+------------+ +----------+
| RPC Caller | | Notifier |
+-----+------+ +----+-----+
| |
| |
v v
+-------------------+ +-------------------+
| RPC | | Notification |
| Messaging Backend | | Messaging Backend |
| (amqp:// or | | (kafka://) |
| rabbit://) | | |
+--------+----------+ +--------+----------+
| |
| |
v v
+------------+ +------+-------+
| RPC | | Notification |
| Server | | Server |
+------------+ +--------------+
提议的变更¶
对 kafka 驱动程序的修改不是主要的重构。为了支持通过 kafka 服务器消息后端发送通知,需要解决一些问题
发布更新
虚拟主机 (vhost) 模拟
加密和身份验证
驱动程序方面
文档
功能和集成测试
发布更新¶
驱动程序应更新为支持最新的 kakfa 服务器软件版本。 截至撰写本文时,最新版本为
scala 版本 - 2.12
kafka 版本 - 1.0.0
kafka-python 版本 - 1.35
虚拟主机 (vhost) 模拟¶
目前,只有 rabbitmq 消息后端支持传输 URL 中包含的 vhost [4]。由于 kafka 服务器架构本身不支持 vhost,因此 kafka 驱动程序修订将通过将虚拟主机名称添加到 kafka 服务器上创建的主题来模拟 vhost 支持。 这将有效地为配置为使用的每个虚拟主机创建一个私有主题。
与此更改相关,devstack kafka 插件需要更新,以防止 kafka 后端失败。
加密和身份验证¶
Apache Kafka 允许客户端通过 SSL 连接。 默认情况下,SSL 已禁用,kafka 驱动程序将更新为通过配置启用它。 此版本将支持服务器身份验证,客户端身份验证将在未来的版本中计划,并将取决于客户端库的功能。 SSL 的配置对于生产者和消费者将相同
在 [oslo_messaging_kafka] 部分
ssl - 尝试通过 ssl 连接
ssl_ca_file - 包含受信任 CA 的数字证书的文件
当传输 URL 中存在用户名和密码时,SASL 可以与 PLAINTEXT 或 SSL 一起用作传输层。 SASL 配置支持当前仅用于 PLAIN 身份验证。 驱动程序将提供以下配置选项
在 [oslo_messaging_kafka] 部分
sasl_mechanisms - 空格分隔的可接受 SASL 机制列表
驱动程序方面¶
对 kafka 驱动程序的修订将包括对多个驱动程序功能方面的更新,以合并新功能并增强驱动程序的可支持性
配置选项 - 更新驱动程序配置选项,以包括新的安全选项,以及删除从 oslo 消息库中删除的弃用选项 [5]。
日志记录 - 添加其他信息、警告、调试消息到驱动程序,以帮助部署驱动程序时的操作和调试任务
检查 python 客户端 - 检查是否安装了库依赖项
连接管理 - 审查并确定任何将使驱动程序操作和支持受益的简化
ack/重新排队消息 - 调查对手动消息提交的支持,以便在通知消息分发后支持消息重新排队
备选方案¶
目前,有其他 oslo 消息驱动程序可用于不同的消息后端。 借助混合消息支持,可以灵活地将消息后端与 oslo 消息库提供的 RPC 或通知通信模式最佳地对齐。 支持和维护 kafka 驱动程序的目的是通过提供最适合其运营目标和需求的替代消息后端来增强 oslo 消息的整体价值。
另一种选择是弃用此驱动程序并支持单个消息后端用于通知(例如 rabbit broker)。
Impact on Existing APIs¶
现有的 API 不需要任何更改。 对 kafka 驱动程序的更改将保留与现有实验性 kafka 部署的兼容性,并且不会影响其他 oslo.messaging 驱动程序。
安全影响¶
通过对身份验证和加密的额外支持,将通过其使用 python 客户端库及其与 kafka 服务器进行消息交换的交互来扩展驱动程序提供的安全模型。
性能影响¶
任何性能影响应仅限于使用 kafka 驱动程序进行消息通知的用户。 使用其他驱动程序(如 rabbitmq 和 amqp 1.0)的用户不受影响。 kafka 驱动程序更新中实现的任何性能变化可能是由于
新服务器版本中底层 kafka 协议的更改
Configuration Impact¶
将添加新的配置项以进行身份验证和安全性,如上所述。 这些选项的默认值将在驱动程序更新和修改时确定。
开发人员影响¶
要被视为受支持,添加到 oslo.messaging 的任何新功能,必须通过驱动程序修改来实现,也应在 kafka 驱动程序中实现。 在新功能需要 kafka 无法提供的行为/功能时,尝试使用该功能的客户端将导致引发 NotImplementedError 异常。 此外,必须记录缺少受支持的功能,并将其包含在发布说明中。
Testing Impact¶
kafka 服务器将在测试中使用作为通知的消息后端。 应使用替代后端(如 rabbit 或 amqp 1.0)作为 RPC 的消息后端。
kafka 驱动程序测试应根据更新中的新功能和功能进行扩展,并且驱动程序必须通过所有测试。
驱动程序必须通过以下门控检查,并在混合消息配置中部署(例如,当 kafka 配置为通知后端时)
oslo.messaging-tox-py27-func-kafka
oslo.messaging-tox-py35-func-kafka
oslo.messaging-src-dsvm-full
oslo.messaging-telemetry-dsvm-integration
oslo.messaging-tempest-neutron-dsvm-src
为了完全测试此驱动程序,zookeeper、kafka、jdk 和客户端需要在 CI 环境中可用。
实现¶
负责人¶
- 主要负责人
ansmith@redhat.com (ansmith 在 IRC 上)
- 其他贡献者
kgiusti@gmail.com (kgiusti 在 IRC 上)
里程碑¶
完成目标里程碑:queens
工作项¶
更新环境以获取最新的软件版本更新和依赖项
实现虚拟主机支持
实现 SSL 和 SASL 集成
实现新的配置项
Update documentation
功能测试集成
更新 devstack 插件
上游 CI 集成
发布后向 openstack-discuss 发送公告
孵化¶
无。
采用¶
预计 kafka 驱动程序将在混合消息部署中采用,作为通知消息后端。 在已经广泛部署 kafka 服务器的环境(例如运营优势)或 kafka 服务器的特性最适合信息分析要求的情况下,可能会采用该驱动程序。
库¶
oslo.messaging
预计 API 稳定¶
无
文档影响¶
kafka 驱动程序文档将添加到库中。 此文档将遵循其他驱动程序提供的文档风格,并应包括以下主题
Apache Kafka 消息后端的运行原理(概述)
先决条件
驱动程序选项概述
kafka 服务器操作
devstack 支持
平台和软件
依赖项¶
驱动程序修订不需要额外的依赖项。
参考资料¶
注意
本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode