【发布时间】:2021-08-02 05:44:18
【问题描述】:
我在一个公认的缓慢配置中设置了 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
【问题讨论】:
-
您可以尝试删除事务然后测量延迟吗?我看到 kafka 交易的延迟增加了。这可能有助于我们了解是否可以针对事务相关设置进行调整。
-
@RishabhSharma - 即使关闭交易,我仍然可以点击
> 120ms...只是我觉得不合适... -
您是否测量了端到端延迟?生产者 + 消费者?
-
将
isolation.level更改为read_uncommitted,然后进行测试。 -
使用基本配置创建简单的消费者和生产者并检查延迟。然后继续添加 idepotence 和事务性等功能并检查延迟。然后您可以找到延迟开始的确切点。
标签: java apache-kafka transactions kafka-consumer-api