Kafka 核心技术与实战
胡夕
Apache Kafka Committer,老虎证券技术总监
52815 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
结束语 (1讲)
Kafka 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

38 | 调优Kafka,你做到了吗?

开放讨论
小结
性能指标调优
基础性调优
优化漏斗
调优目标
调优Kafka

该思维导图由 AI 生成,仅供参考

你好,我是胡夕。今天我要和你分享的主题是:如何调优 Kafka。

调优目标

在做调优之前,我们必须明确优化 Kafka 的目标是什么。通常来说,调优是为了满足系统常见的非功能性需求。在众多的非功能性需求中,性能绝对是我们最关心的那一个。不同的系统对性能有不同的诉求,比如对于数据库用户而言,性能意味着请求的响应时间,用户总是希望查询或更新请求能够被更快地处理完并返回。
对 Kafka 而言,性能一般是指吞吐量和延时。
吞吐量,也就是 TPS,是指 Broker 端进程或 Client 端应用程序每秒能处理的字节数或消息数,这个值自然是越大越好。
延时和我们刚才说的响应时间类似,它表示从 Producer 端发送消息到 Broker 端持久化完成之间的时间间隔。这个指标也可以代表端到端的延时(End-to-End,E2E),也就是从 Producer 发送消息到 Consumer 成功消费该消息的总时长。和 TPS 相反,我们通常希望延时越短越好。
总之,高吞吐量、低延时是我们调优 Kafka 集群的主要目标,一会儿我们会详细讨论如何达成这些目标。在此之前,我想先谈一谈优化漏斗的问题。

优化漏斗

优化漏斗是一个调优过程中的分层漏斗,我们可以在每一层上执行相应的优化调整。总体来说,层级越靠上,其调优的效果越明显,整体优化效果是自上而下衰减的,如下图所示:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kafka性能调优是提高系统性能的关键,本文从优化目标、优化漏斗、基础性调优四个方面详细介绍了Kafka的调优方法。首先,明确了调优目标是为了实现高吞吐量和低延时。其次,提出了优化漏斗的概念,分为应用程序层、框架层、JVM层和操作系统层,指导读者在每个层级上进行相应的优化调整。在基础性调优方面,文章详细介绍了操作系统调优和JVM层调优的方法,包括文件系统选择、swap空间设置、ulimit -n和vm.max_map_count参数设置、堆大小设置以及GC收集器的选择等。此外,还介绍了Broker端调优的重要性和应用层调优的一些公共法则。通过分层的方式,为读者提供了全面的Kafka调优指南,帮助读者更好地理解和实践Kafka的性能优化。文章还分享了调优吞吐量和延时的参数配置以及具体的配置原因,以及一个性能调优的真实案例,强调了窄化和定位问题的重要性。文章内容丰富,实用性强,对于需要优化Kafka性能的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kafka 核心技术与实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(32)

  • 最新
  • 精选
  • 诗泽
    请问最后这个例子中的测试 Console Consume是怎样污染缓存页的?是因为它读取了比较老的数据,使得新数据被写入磁盘导致的吗?

    作者回复: 是的

    2019-08-29
    5
    24
  • diyun
    老师你好,我们生产遇到一个问题,一个kafka broker集群升级到1.0.0后,consumer 客户端版本还是老的0.10.0.1,这样没法使用zero copy特性了导致有大量数据写入后kafka broker OOM了。请问我如果把consumer 客户端版本升级到1.0.0后,他连接的另一个老的broker集群(还是0.10.0.1版本)是否还能使用zero copy?kafka版本是向下兼容的吗,还是consumer和broker版本必须一致才能使用zero copy这样的特性。

    作者回复: 还是consumer和broker版本必须一致才能使用zero copy这样的特性 --- 是的,否则就要在broker端做消息转换,这样消息对象会在jvm堆上重建,丧失了zero copy特性。

    2020-01-12
    10
  • wgcris
    你好,请教您一个问题,关于leader均衡,如果集群规模比较大,一次leader均衡会有上千个partition要进行leader切换,这会导致客户端很长时间不可用,目前针对这个场景有没有一些比较成熟的解决方案?

    作者回复: 关闭自动leader均衡,手动调整leader迁移是目前比较好的做法

    2019-11-07
    2
    9
  • 外星人
    你好,一个broker建议最多存放多少个topic partition啊?这个个数和broker 的性能有啥关系吗?

    作者回复: 没有一定之规。不过据官网文章,单broker最多能承受2000个分区,这个和性能还是有很大关系的。毕竟分区数越多,物理IO性能就可能越差

    2019-09-01
    3
    7
  • lmtoo
    怎么查询linux是否开启了atime

    作者回复: mount -l,默认是开启的,如果发现noatime则是关闭的。Linux 2.6.30引入了relatime。有了relatime,atime的更新时机被缩小了,如果atime=mtime就不会被更新了。

    2019-08-29
    2
    7
  • 小鱼
    关于zero copy那块,是不是仅针对consumer端而言呢?还是说,producer版本与broker不一致时,也会降低性能?

    作者回复: "producer版本与broker不一致时,也会降低性能" --- 不会的

    2019-08-29
    6
  • ban
    老师,为什么测试 Console Consume读取比较老的数据,新的数据为什么会写入磁盘?这里不懂,Consume只是读取怎么会影响到写入

    作者回复: 操作系统会被最近读取的page缓存起来,所以会“污染”页缓存

    2019-09-14
    2
    5
  • ProgramGeek
    老师,最近遇到一个问题,在kafka加入SASL ACL中,生产的时候出现需要给事务ID赋权,那有个问题在有多生产者的情况下,同一主题下的事务ID能一样吗?如果ID不能一样,那我在加入kafka的时候每次都需要赋权怎么办

    作者回复: 如果你并没有共享KafkaProducer实例,那么每个生产者最好设置成不同的transactional.id。2.0版本开始支持ACL前缀,可以用kafka-acls.sh --resource-pattern-type prefixed 一试

    2019-08-30
    4
  • 张振宇
    老师,发现kafka的log文件比较大,执行rm删除log后df- h还未释放空间。 然后lsof -n /data |grep deleted 发现查出来的进程是kafka的进程号,也不敢直接kill 想咨询下老师这种情况如何处理,有没更优雅的方式来优化。

    作者回复: hmmm... 直接删除log文件的做法非常不优雅。。。 如果你要删除至少也要关闭Kafka集群之后再这么做。 最优雅的方式还是通过删除topic的命令来执行

    2020-04-14
    2
    3
  • SAM(陈嘉奇)
    老师你好我查到的swappiness的解释是这样的: This control is used to define how aggressive (sic) the kernel will swap memory pages. Higher values will increase aggressiveness, lower values decrease the amount of swap. A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone. 按这个意思swap = 0的意思应该不是不交换。

    作者回复: 嗯嗯,我看到那篇文章了。似乎swappiness作用的真实性有待确认。

    2020-03-05
    3
收起评论
显示
设置
留言
32
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部