[英]Kafka Streams rebalancing latency spikes on high throughput kafka-streams services
[英]Tracking down high latency in Kafka
我在一个公认的缓慢配置中设置了 Kafka - 但我并不期待我看到的数字。
我将集群设置为LogAppendTime
,因此我正在测量事件写入 Kafka (由代理决定)和服务接收到事件之间的时间。 代理和应用程序都“位于同一位置”,因此服务器之间的 ping 时间很短,时钟应该同步或接近它。
我看到2ms
和600ms
之间的延迟,很多是250ms
+...巨大的差异让我觉得我的设置有些问题。 它也因消费群体而异。
Kafka v2.7.0
x 4 个代理
主要经纪人属性:
default.replication.factor = 4
min.insync.replicas = 2
num.partitions = 50
offsets.topic.num.partitions = 50
offsets.topic.replication.factor = 4
transaction.state.log.min.isr = 2
transaction.state.log.num.partitions = 50
transaction.state.log.replication.factor = 4
主要消费者属性:
fetch.max.wait.ms = 500
fetch.min.bytes = 1
isolation_level = read_committed
主要生产者属性:
enable.idempotence = true
linger.ms = 0
transaction.id = <id>
我正在使用事务生产者通过producer.sendOffsetsToTransaction()
提交偏移量。
有许多消费者组,它们都是事务性的,并且以相同的方式操作,读取事件,然后提交新事件以及新的偏移量。
有没有我缺少的设置? 我知道 Kafka 不适合低延迟,但我想设置以实现我能达到的最低延迟......希望 < 20ms
。
编辑
我也尝试过这些设置:
default.replication.factor = 2
min.insync.replicas = 1
num.partitions = 50
offsets.topic.num.partitions = 50
offsets.topic.replication.factor = 2
transaction.state.log.min.isr = 1
transaction.state.log.num.partitions = 50
transaction.state.log.replication.factor = 2
不使用事务和
enable.idempotence = false
num.partitions = 50
和 offsets.topic.num.partitions = offsets.topic.num.partitions = 50
,代理的数量是 4。我认为这会导致问题,因为您的集群花费大量时间进行复制和获取副本,因此时间花在网络上通讯。 此外,I/O 线程将受到限制,从而导致问题。
如果可能,请减少分区数。 有理由在 4 节点集群上有 50 个分区吗?
建议你玩以下设置
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.