【问题标题】:Tracking down high latency in Kafka跟踪 Kafka 中的高延迟
【发布时间】:2021-08-02 05:44:18
【问题描述】:

我在一个公认的缓慢配置中设置了 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

【问题讨论】:

  • 您可以尝试删除事务然后测量延迟吗?我看到 kafka 交易的延迟增加了。这可能有助于我们了解是否可以针对事务相关设置进行调整。
  • @RishabhSharma - 即使关闭交易,我仍然可以点击&gt; 120ms...只是我觉得不合适...
  • 您是否测量了端到端延迟?生产者 + 消费者?
  • isolation.level更改为read_uncommitted ,然后进行测试。
  • 使用基本配置创建简单的消费者和生产者并检查延迟。然后继续添加 idepotence 和事务性等功能并检查延迟。然后您可以找到延迟开始的确切点。

标签: java apache-kafka transactions kafka-consumer-api


【解决方案1】:

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

尽可能减少分区数。是否有理由在 4 节点集群上有 50 个分区?

建议你玩以下设置

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

【讨论】:

  • 老实说,我只是使用了这两个的默认值。分区数量如何影响复制速度...我认为 Kafka 会在一次调用中获取多个分区的数据...我错了吗?
  • @Cheetah - 我也这么认为。每个分区都需要复制,如果要复制的分区很多,它们会占用网络和 IO 带宽。尝试减少分区的数量,然后增加四个参数(在上面)。如果您没有得到任何改进,请提高上述答案中的参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 2019-05-12
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多