追踪Kafka中的高延迟



我在一个公认的缓慢配置中设置了Kafka,但我没有预料到我看到的数字。

我将集群设置为LogAppendTime,因此我测量事件写入Kafka(由代理决定(和服务接收事件之间的时间。经纪人和申请都是";共同定位";因此服务器之间的ping时间很低,时钟应该同步或接近它

我看到2ms600ms之间的延迟,还有250ms+。。。巨大的差异让我觉得我的设置出了问题。不同的消费群体之间也有所不同。

Kafka v2.7.0x 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 = 50offsets.topic.num.partitions = 50,代理数量为4。我认为这导致了一个问题,因为您的集群正在花费大量时间进行复制和获取副本,所以时间都花在了网络通信上。此外,I/O线程也会受到限制,从而导致问题。

尽可能减少分区数量。在一个4节点集群上有50个分区是有原因的吗?

建议您使用以下设置

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

最新更新