建议用于 Apache Kafka 客户端的配置
下面是从 Apache Kafka 客户端应用程序使用 Azure 事件中心时的建议配置。
Java 客户端配置属性
生成者和使用者配置
properties | 建议的值 | 允许的范围 | 备注 |
---|---|---|---|
metadata.max.age.ms |
180000(近似值) | < 240000 | 可以降低,以便更快地获取元数据更改。 |
connections.max.idle.ms |
180000 | < 240000 | Azure 会关闭空闲时间 > 240,000 毫秒的入站 TCP,这可能会导致在连接已“死”的情况下继续发送(因为发送超时而显示为过期的批)。 |
仅限生成者配置
可在此处找到生成者配置。
properties | 建议的值 | 允许的范围 | 备注 |
---|---|---|---|
max.request.size |
1000000 | < 1046528 | 如果发送的请求大于 1,046,528 字节,则服务会关闭连接。 此值必须更改,否则会导致高吞吐量生成场景中出现问题。 |
retries |
> 0 | 可能需要增大 delivery.timeout.ms 值,请参阅文档。 | |
request.timeout.ms |
30000 .. 60000 | > 20000 | 事件中心会在内部默认设置最小值 20,000 毫秒。 虽然系统会接受超时值较低的请求,但不保证客户端行为。 确保 request.timeout.ms 至少为建议值 60000,session.timeout.ms 至少为建议值 30000。 这些设置过低可能会导致使用者超时,超时会导致重新平衡(重新平衡又会导致超时,而超时又会导致重新平衡,陷入一个死循环)。 |
metadata.max.idle.ms |
180000 | > 5000 | 控制生成者为空闲的主题缓存元数据的时间长度。 如果自上次生成主题以来过去的时间超过了元数据空闲持续时间,系统会忘记该主题的元数据,在下一次访问它时会强制执行元数据提取请求。 |
linger.ms |
> 0 | 对于高吞吐量场景,逗留值应该等于最大的可容忍值,以便利用批处理。 | |
delivery.timeout.ms |
请根据公式 (request.timeout.ms + linger.ms ) * retries 进行设置。 |
||
compression.type |
none |
目前不支持压缩。 |
仅限使用者配置
可在此处找到使用者配置。
properties | 建议的值 | 允许的范围 | 备注 |
---|---|---|---|
heartbeat.interval.ms |
3000 | 3000 为默认值,不应更改。 | |
session.timeout.ms |
30000 | 6000 .. 300000 | 从 30000 开始。如果由于检测信号丢失而出现频繁地进行重新平衡的情况,请增大此值。 确保 request.timeout.ms 至少为建议值 60000,session.timeout.ms 至少为建议值 30000。 这些设置过低可能会导致使用者超时,超时会导致重新平衡(重新平衡又会导致超时,而超时又会导致重新平衡,陷入一个死循环)。 |
max.poll.interval.ms |
300000(默认值) | >session.timeout.ms | 用于重新平衡超时,因此不应将其设置太低。 必须大于 session.timeout.ms。 |
librdkafka 配置属性
主 librdkafka
配置文件(链接)包含以下属性的扩展说明。
生成者和使用者配置
properties | 建议的值 | 允许的范围 | 备注 |
---|---|---|---|
socket.keepalive.enable |
是 | 如果预计连接会空闲,则此项为必需项。 Azure 会关闭空闲时间 > 240,000 毫秒的入站 TCP。 | |
metadata.max.age.ms |
~ 180000 | < 240000 | 可以降低,以便更快地获取元数据更改。 |
仅限生成者配置
properties | 建议的值 | 允许的范围 | 备注 |
---|---|---|---|
retries |
2 | 默认值为 2147483647。 | |
request.timeout.ms |
30000 .. 60000 | > 20000 | 事件中心会在内部默认设置最小值 20,000 毫秒。 librdkafka 默认值为 5000,这可能会产生问题。 虽然系统会接受超时值较低的请求,但不保证客户端行为。 |
partitioner |
consistent_random |
请参阅 librdkafka 文档 | consistent_random 是默认值,且为最佳值。 大多数情况下,可以理想地处理空键和 null 键。 |
compression.codec |
none |
目前不支持压缩。 |
仅限使用者配置
properties | 建议的值 | 允许的范围 | 备注 |
---|---|---|---|
heartbeat.interval.ms |
3000 | 3000 为默认值,不应更改。 | |
session.timeout.ms |
30000 | 6000 .. 300000 | 从 30000 开始。如果由于检测信号丢失而出现频繁地进行重新平衡的情况,请增大此值。 |
max.poll.interval.ms |
300000(默认值) | >session.timeout.ms | 用于重新平衡超时,因此不应将其设置太低。 必须大于 session.timeout.ms。 |
更详尽的说明
请查看下表中与配置相关的常见错误情况。
症状 | 问题 | 解决方案 |
---|---|---|
由于重新平衡而导致偏移量提交失败 | 使用者在两次调用 poll() 之间等待的时间太长,因此服务将该使用者踢出了群组。 | 有几种选项:
|
生成吞吐量高时的网络异常 | 你是否正在使用 Java 客户端 + 默认的 max.request.size? 你的请求可能太大。 | 请参阅上述 Java 配置。 |
后续步骤
有关所有 Azure 服务的配额和限制,请参阅 Azure 订阅和服务限制、配额和约束。