Condividi tramite

Azure 事件中心的 Apache Kafka 客户端配置

本指南可帮助 Kafka 开发人员在从 Apache Kafka 迁移到 Azure 事件中心时配置其客户端应用程序。 事件中心提供与 Kafka 兼容的终结点,使你能够使用现有的 Kafka 客户端库,且配置更改最少。

在您开始之前

可以和无法配置的内容

Azure 事件中心是一项完全托管的服务。 与自托管 Kafka 群集不同,你无权访问代理端配置。 这意味着:

配置类型 配置? 备注
客户端配置 ✅ 是 应用程序代码中的生成者和使用者设置
Broker/server 配置 ❌ 否 由事件中心管理(复制、保留策略等)
主题级配置 ⚠️ 有限公司 通过 Azure 门户或 API(而不是 Kafka AdminClient)设置分区计数和保留期

除非有特定需求,否则使用默认值

重要

对于大多数工作负荷,默认 Kafka 客户端配置适用于事件中心。 仅在具有特定性能要求或遇到问题时修改设置。 不正确的配置更改可能会对吞吐量、延迟和可靠性产生负面影响。

本文中的表列出了 不同于标准 Kafka 默认值 或具有 特定于事件中心的约束的配置。 如果未在此处列出配置,请使用 Kafka 客户端默认值。

所需的连接设置

连接到事件中心的所有 Kafka 客户端都需要以下身份验证设置:

bootstrap.servers=<your-namespace>.servicebus.chinacloudapi.cn:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="<your-connection-string>";

有关更多连接选项,请参阅 使用 Kafka 协议连接到事件中心

Java 客户端配置属性

本部分介绍官方 Apache Kafka Java 客户端的配置。 有关 Kafka 生成者和使用者配置的完整列表,请参阅 Apache Kafka 文档

与 Kafka 默认值不同的配置

以下设置具有特定于事件中心的约束或建议的值,这些值不同于标准 Kafka 默认值:

生成者和使用者

properties 违约 建议用于事件中心 约束 备注
metadata.max.age.ms 300000 180000 必须是 < 240000 Azure 在 240 秒后关闭空闲连接
connections.max.idle.ms 540000 180000 必须是 < 240000 阻止在关闭的连接上发送(显示为过期的批处理)

仅生成者

properties 违约 建议用于事件中心 约束 备注
max.request.size 1048576 1000000 必须是 < 1046528 严重:如果超出连接,则关闭。 从默认值减少。
request.timeout.ms 30000 60000 必须是 > 20000 事件中心在内部强制实施至少 20 秒
compression.type none nonegzip gzip 支持 不支持其他压缩类型(snappy、lz4、zstd)

仅限使用者

properties 违约 建议用于事件中心 约束 备注
heartbeat.interval.ms 3000 3000 (保留默认值) 请勿更改此值
session.timeout.ms 45000 30000 6000-300000 如果看到频繁的重新平衡,增加
max.poll.interval.ms 300000 300000 (保留默认值) 必须是 >session.timeout.ms 仅当处理时间超过 5 分钟时才增加

要保留默认值的配置

这些设置适用于事件中心的默认值。 仅当有特定要求时更改它们:

properties 违约 何时考虑更改
retries 2147483647 很少需要更改
delivery.timeout.ms 120000 使用自定义重试策略时进行调整
linger.ms 0 提高高吞吐量方案(交易吞吐量延迟)
batch.size 16384 提高高吞吐量方案
acks 全部 用于 1 提高吞吐量,且持久性略低
enable.idempotence 为恰好一次的生成者语义启用。 需要 request.timeout.ms ≥ 60000,高 retries (默认值足够),并且 acks=all

librdkafka 配置属性

本部分介绍基于 librdkafka 的客户端(Confluent Python、Confluent .NET、Confluent Go 等)的配置。 有关完整的配置参考,请参阅 librdkafka 文档

不同于 librdkafka 默认值的配置

生成者和使用者

properties 违约 建议用于事件中心 约束 备注
socket.keepalive.enable 需要防止空闲连接关闭
metadata.max.age.ms 900000 180000 必须是 < 240000 Azure 在 240 秒后关闭空闲连接

仅生成者

properties 违约 建议用于事件中心 约束 备注
request.timeout.ms 五千 60000 必须是 > 20000 严重:对于事件中心而言,librdkafka 默认值太低
compression.codec none nonegzip gzip 支持 不支持其他压缩类型

仅限使用者

properties 违约 建议用于事件中心 约束 备注
heartbeat.interval.ms 3000 3000 (保留默认值) 请勿更改此值
session.timeout.ms 45000 30000 6000-300000 如果看到频繁的重新平衡,增加
max.poll.interval.ms 300000 300000 (保留默认值) 必须是 >session.timeout.ms 仅当处理时间超过 5 分钟时才增加

要保留默认值的配置

properties 违约 何时考虑更改
retries 2147483647 很少需要更改
partitioner consistent_random 处理 null 键;仅针对特定密钥分发需求进行更改

排查常见问题

如果在从 Kafka 迁移到事件中心后遇到问题,请检查以下常见的配置相关问题:

症状 可能的原因 解决方案
连接意外关闭 max.request.size 超过 1,046,528 字节 设置 max.request.size=1000000
过期的批处理或发送超时 Azure 关闭的空闲连接 设置 connections.max.idle.ms=180000metadata.max.age.ms=180000
请求超时 (librdkafka) 默认值 request.timeout.ms 太低 设置 request.timeout.ms=60000
频繁的使用者重新均衡 session.timeout.ms 太低或处理速度太慢 增加 session.timeout.msmax.poll.interval.ms。 考虑设置每个使用者实例的唯一性 group.instance.id 以减少暂时性断开连接的重新平衡
偏移提交失败 轮询之间的处理时间过长 增加 max.poll.interval.ms、减少批大小或并行处理
压缩错误 不支持的压缩类型 使用 compression.type=gzipcompression.type=none
身份验证失败 连接字符串格式不正确 验证 sasl.jaas.config 格式和连接字符串值
高延迟峰值 linger.ms 设置过高,导致批累积延迟 降低 linger.ms 值(用于 0 最低延迟)
早于预期消失的数据 事件中心保留期比原始 Kafka 保留期短 在 Azure 门户中调整保留期;检查每个层的最大保留期的配额和限制
意外偏移重置 超出事件中心保留期的使用者偏移量已过期 确保 auto.offset.reset 已正确配置;在偏移过期之前增加保留期或处理数据
未从所有分区接收所有数据 Zombie 使用者应用程序在同一环境中运行 group.id 隔离和终止僵尸应用程序

不支持配置

事件中心不提供以下 Kafka 功能和配置:

功能 / 特点 原因
用于主题管理的 Kafka AdminClient 改用 Azure 门户、CLI 或 ARM 模板
中转站配置 事件中心完全托管
Transactions 目前不支持
恰好一次的语义 (EOS) 目前不支持
gzip 以外的压缩类型 仅支持 gzip 压缩
服务器端的自定义分区程序 分区分配仅客户端