【问题标题】:Kafka latency optimizationKafka 延迟优化
【发布时间】:2018-04-17 19:49:54
【问题描述】:

我的 kafka 版本是 0.10.2.1。 我的服务的 qps 非常低(1msg/sec)。而且我们对rtt的要求真的很严格。 ( 99.9%

Time .                num of msgs .  percentage
cost<=2ms             0             0.000%

2ms<cost<=5ms         12391         32.659%

5ms<cost<=8ms         25327         66.754%

8ms<cost<=10ms        186           0.490%

10ms<cost<=15ms       24            0.063%

15ms<cost<=20ms       2             0.005%

20ms<cost<=30ms       0             0.000%

30ms<cost<=50ms       4             0.011%

50ms<cost<=100ms      1             0.003%

100ms<cost<=200ms     0             0.000%

200ms< cost<=300ms    6             0.016%

300ms<cost<=500ms     0             0.000%

500ms<cost<=1s        0             0.000%

cost>1s               0             0.000%

但最近,变成了:

cost<=2ms            0              0.000%

2ms<cost<=5ms        7592           29.202%

5ms<cost<=8ms        17470          67.197%

8ms<cost<=10ms       698            2.685%

10ms<cost<=15ms      143            0.550%

15ms<cost<=20ms      23             0.088%

20ms<cost<=30ms      19             0.073%

30ms<cost<=50ms      11             0.042%

50ms<cost<=100ms     5              0.019%

100ms<cost<=200ms    11            0.042%

200m s<cost<=300ms   26             0.100%

300ms<cost<=500ms    0              0.000%

500ms<cost<=1s       0             0.000%

cost>1s              0              0.000%

当我检查日志时,我看不到检查特定消息具有高 rtt 原因的方法。如果有任何优化方法(操作系统调整,代理配置),请赐教

【问题讨论】:

  • 您能分享您的代理和客户端配置吗?重启客户端后性能有提升吗?
  • num.network.threads=3 num.io.threads=10 message.max.bytes=10000120 replica.fetch.max.bytes=10000120 min.insync.replicas = 2 connections.max.idle .ms = 86400000 leader.imbalance.check.interval.seconds=30 log.dirs=/home/disk0/kafka,/home/disk1/kafka,/home/disk2/kaf‌​ka,/home/disk3/kafka‌​, /home/ssd1/kafka,/h‌​ome/ssd2/kafka num.partitions = 20 num.recovery.threads.per.data.dir = 2 num.replica.fetchers = 3 default.replication.factor = 3 unclean.leader .election.enable = false
  • 除此之外,在客户端,required.acks 将始终设置为 -1,并且我的 3 个经纪人位于 3 个不同的数据中心,但在一个城市,他们每个人之间的平均 ping 为约 1.5 毫秒
  • 您是否在监控任何系统/应用统计信息?
  • cpu 平均空闲率为 98% ~ 99%,内存空闲率为 85%(总共 128g)qps 非常低,因此网络 IO 低。我还设置了 vm.swappiness = 0 来禁用交换。但是我还没有把 jmx 放在监视器上。

标签: apache-kafka


【解决方案1】:

如果不分解请求处理时间,就很难判断哪一部分可能是问题的罪魁祸首。更具体地说,您需要连接您的 jmx 并检查以下请求级指标:

TotalTimeMs 请求队列时间毫秒 本地时间 远程时间 ResponseQueueTimeMs ResponseSendTimeMs

https://kafka.apache.org/documentation/#monitoring

随着时间的推移检查它们的 avg / 99 百分位值,看看哪一个导致性能下降。

【讨论】:

  • fetchFollowerTotalMs 99th 和 avg 都非常高...... cpu 空闲总是高于 94%。 mem 使用了 15% ,磁盘 io utils 低于 5%,出了什么问题..
  • 那么在fetchFollower中remoteTimeMs和localTimeMs是什么意思,不知道哪个是远程哪个是本地
  • 如果大部分延迟来自 fetch follower,那么它可能表明您的 follower fetcher 线程正忙于从 leader 获取。对于 fetch follower,应该没有远程时间,本地时间包括将获取的记录追加到本地日志所花费的时间。
  • 鉴于我们的 cpu 和网络使用率都很低,我应该增加 fetch 线程数吗?有什么建议吗?
【解决方案2】:
  1. 考虑升级到性能改进的 0.11(或 1.00)

  2. 优化文章:https://www.confluent.io/blog/optimizing-apache-kafka-deployment/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 2021-01-05
    • 2022-10-13
    相关资源
    最近更新 更多