繁体   English   中英

跟踪 Kafka 中的高延迟

[英]Tracking down high latency in Kafka

我在一个公认的缓慢配置中设置了 Kafka - 但我并不期待我看到的数字。

我将集群设置为LogAppendTime ,因此我正在测量事件写入 Kafka (由代理决定)和服务接收到事件之间的时间。 代理和应用程序都“位于同一位置”,因此服务器之间的 ping 时间很短,时钟应该同步或接近它。

我看到2ms600ms之间的延迟,很多是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 个分区吗?

建议你玩以下设置

  • num.network.threads
  • queued.max.requests。
  • num.io.threads。
  • num.replica.fetchers。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM