38 | 调优Kafka,你做到了吗?
38 | 调优Kafka,你做到了吗?
讲述:胡夕
时长16:17大小14.92M
调优目标
优化漏斗
基础性调优
操作系统调优
JVM 层调优
Broker 端调优
应用层调优
性能指标调优
调优吞吐量
调优延时
小结
开放讨论
赞 5
提建议
精选留言(31)
- 诗泽2019-08-29请问最后这个例子中的测试 Console Consume是怎样污染缓存页的?是因为它读取了比较老的数据,使得新数据被写入磁盘导致的吗?
作者回复: 是的
共 5 条评论24 - 诗泽2019-08-29如果将kafka 部署到k8s 中,因为k8s 的节点都是禁用swap 的,所以文中提到的swappiness 设置也就失效了14
- diyun2020-01-12老师你好,我们生产遇到一个问题,一个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特性。
10 - wgcris2019-11-07你好,请教您一个问题,关于leader均衡,如果集群规模比较大,一次leader均衡会有上千个partition要进行leader切换,这会导致客户端很长时间不可用,目前针对这个场景有没有一些比较成熟的解决方案?
作者回复: 关闭自动leader均衡,手动调整leader迁移是目前比较好的做法
共 2 条评论9 - 外星人2019-09-01你好,一个broker建议最多存放多少个topic partition啊?这个个数和broker 的性能有啥关系吗?
作者回复: 没有一定之规。不过据官网文章,单broker最多能承受2000个分区,这个和性能还是有很大关系的。毕竟分区数越多,物理IO性能就可能越差
共 3 条评论7 - lmtoo2019-08-29怎么查询linux是否开启了atime
作者回复: mount -l,默认是开启的,如果发现noatime则是关闭的。Linux 2.6.30引入了relatime。有了relatime,atime的更新时机被缩小了,如果atime=mtime就不会被更新了。
共 2 条评论7 - 小鱼2019-08-29关于zero copy那块,是不是仅针对consumer端而言呢?还是说,producer版本与broker不一致时,也会降低性能?
作者回复: "producer版本与broker不一致时,也会降低性能" --- 不会的
6 - ban2019-09-14老师,为什么测试 Console Consume读取比较老的数据,新的数据为什么会写入磁盘?这里不懂,Consume只是读取怎么会影响到写入
作者回复: 操作系统会被最近读取的page缓存起来,所以会“污染”页缓存
共 2 条评论5 - 钱2019-09-24没有kafka性能调优的经验,不过性能调优的思路是一致的。优化漏斗很形象,大部分调优主要在应用层,再深一点会到框架层,此时就需要对框架有很好的掌握啦!再深一点就到JVM了,这里主要是看内存空间分配是否合理,垃圾收集器是否正确选择。系统层调优,貌似没做过,这一层就必须对操作系统非常了解了。 万变不离其宗,提高性能的思路就那么几种: 1:使用更快的硬件,比如:内存 2:使用合适的数据结构 3:异步化 4:并行化 5:异步化和并行化,其实是在出现速度差的情况下,充分利用更快的组件的思路。展开4
- ProgramGeek2019-08-30老师,最近遇到一个问题,在kafka加入SASL ACL中,生产的时候出现需要给事务ID赋权,那有个问题在有多生产者的情况下,同一主题下的事务ID能一样吗?如果ID不能一样,那我在加入kafka的时候每次都需要赋权怎么办
作者回复: 如果你并没有共享KafkaProducer实例,那么每个生产者最好设置成不同的transactional.id。2.0版本开始支持ACL前缀,可以用kafka-acls.sh --resource-pattern-type prefixed 一试
4 - 张振宇2020-04-14老师,发现kafka的log文件比较大,执行rm删除log后df- h还未释放空间。 然后lsof -n /data |grep deleted 发现查出来的进程是kafka的进程号,也不敢直接kill 想咨询下老师这种情况如何处理,有没更优雅的方式来优化。
作者回复: hmmm... 直接删除log文件的做法非常不优雅。。。 如果你要删除至少也要关闭Kafka集群之后再这么做。 最优雅的方式还是通过删除topic的命令来执行
共 2 条评论3 - SAM(陈嘉奇)2020-03-05老师你好我查到的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作用的真实性有待确认。
3 - 李先生2020-04-15胡哥: 消费者避免重复消费消息,比如kafka中的一条消息包含10个子消息,是针对kafka中的一条消息做幂等呢,还是针对kafka的每个子消息做幂等呢?
作者回复: 针对外层消息。你下面的子消息自行维护
2 - vcjmhg2021-07-20这个优化思路感觉超级好!!1
- John2021-02-08请问老师,swappiness越小越不积极swap内存,不是更容易oom吗?
作者回复: oom也没事啊,关键是要弄明白原因。其实我们并不是怕oom
1 - Minze2020-07-28老师你好,我最近发现有时候consumergroup的current offset经常会几秒钟不动,而这是log end offset是不断增加的。我该从哪些方向着手检查呢?已经检查过了consumer端,消费的方法并没有阻塞的情况,执行时间都是毫秒级的,手动commit offset
作者回复: 哪个版本的Kafka呢?如果是java consumer,查一下有没有提交位移失败的log?
1 - 大坏狐狸2020-03-21优化tps和优化延迟 参数都是相反的啊,这个要根据需求来优化么。 那么tps如果增加了 延迟不是高了么,总的时间消耗 跟优化延迟哪个更可取呢?
作者回复: 不一定在任何场景下都是相反的
1 - 爱学习的小学生2022-11-15 来自北京processing fetch with max size 30720000 from consumer on partition PartitionData(fetchOffset=12297049, logStartOffset=-1, maxBytes=30720000, currentLeaderEpoch=Optional.empty, lastFetchedEpoch=Optional.empty) (kafka.server.ReplicaManager) org.apache.kafka.common.errors.CorruptRecordException: Found record size -1554710528 smaller than minimum record overhead (14) in file 老师我的kafka有这个报错,并且这个分区的isr只有一个,这是什么问题呢展开
- 小铁จุ๊บMia2022-09-13 来自广东既然讲到调优,怎么对kafka进行性能压测呢?
- 海水2022-02-21单一broker cpu 和带宽过高 感觉像是__consumer_offsets 相关的原因 老师 需要怎么排查问题呢