Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本指南可帮助 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 压缩 |
| 服务器端的自定义分区程序 | 分区分配仅客户端 |