Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
本指南可帮助 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 |
none 或 gzip |
仅 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 |
none 或 gzip |
仅 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=180000 和 metadata.max.age.ms=180000 |
| 请求超时 (librdkafka) | 默认值 request.timeout.ms 太低 |
设置 request.timeout.ms=60000 |
| 频繁的使用者重新均衡 |
session.timeout.ms 太低或处理速度太慢 |
增加 session.timeout.ms 或 max.poll.interval.ms。 考虑设置每个使用者实例的唯一性 group.instance.id 以减少暂时性断开连接的重新平衡 |
| 偏移提交失败 | 轮询之间的处理时间过长 | 增加 max.poll.interval.ms、减少批大小或并行处理 |
| 压缩错误 | 不支持的压缩类型 | 使用 compression.type=gzip 或 compression.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 压缩 |
| 服务器端的自定义分区程序 | 分区分配仅客户端 |