Java 追踪卡夫卡中的高延迟

Java 追踪卡夫卡中的高延迟,java,apache-kafka,transactions,kafka-consumer-api,Java,Apache Kafka,Transactions,Kafka Consumer Api,我有卡夫卡设置在一个公认的缓慢配置-但我并不期待我看到的数字 我将集群设置为LogAppendTime,因此我正在测量事件写入Kafka(由代理决定)和服务接收事件之间的时间。代理和应用程序都位于同一位置,因此服务器之间的ping时间较短,时钟应该同步或接近 我看到了2ms和600ms之间的延迟,很多是250ms+…巨大的差异让我觉得我的设置有问题。消费者群体之间的差异也有所不同 Kafka v2.7.0x 4 主要经纪人财产: default.replication.factor = 4 mi

我有卡夫卡设置在一个公认的缓慢配置-但我并不期待我看到的数字

我将集群设置为
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>
主要消费者财产:

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>
主要生产商财产:

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>
不使用事务和

enable.idempotence = false

num.partitions=50
offset.topic.num.partitions=50
,代理数量为4。我认为这会导致一个问题,因为您的群集花费大量时间进行复制和获取副本,因此需要将时间花在网络通信上。此外,I/O线程将受到限制,从而导致问题

如果可能的话,减少分区的数量。是否有理由在一个4节点集群上有50个分区

建议您使用以下设置

  • num.network.threads
  • 排队的最大请求数
  • num.io.threads
  • num.replica.fetchers

能否尝试删除事务,然后测量延迟?我看到卡夫卡事务的延迟增加了。这可能有助于我们了解是否可以针对事务相关的设置进行调整。@RishabhSharma-即使事务关闭,我仍然可以点击
>120ms
…只是我觉得不对…您是否测量了端到端延迟?生产者+消费者?将
隔离。级别
更改为
读取未提交的
,并进行测试。创建具有基本配置的简单消费者和生产者,并检查延迟。然后继续添加像idepotence和transactional这样的特性,并检查延迟。然后你可以找到延迟开始的确切点。老实说,我只是使用了这两个的默认值。分区的数量如何影响复制速度…我以为Kafka会在一次调用中获取多个分区的数据…我错了吗?@Cheetah-我也这么认为。每个分区都需要复制,如果有很多分区需要复制,它们会占用网络和IO带宽。尝试减少分区的数量,然后增加四个参数(在上面的例子中)。如果你没有得到任何改善,那就增加上面答案中的参数。