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

08 | 最最最重要的集群参数配置(下)

KAFKA_JVM_PERFORMANCE_OPTS
KAFKA_HEAP_OPTS
提交时间
Swappiness
文件系统类型
文件描述符限制
设置方法
垃圾回收器选择
堆大小设置
Java版本
max.message.bytes
retention.bytes
retention.ms
好的法则来评估Kafka对内存的使用
Kafka对内存的使用
操作系统参数
JVM参数
Topic级别参数
开放讨论
除了Broker端参数,搭建Kafka集群还需要哪些关键参数?
搭建Kafka集群关键参数设置

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

今天我们继续来聊那些重要的 Kafka 集群配置,下半部分主要是 Topic 级别参数、JVM 参数以及操作系统参数的设置。
在上一期中,我们讨论了 Broker 端参数设置的一些法则,但其实 Kafka 也支持为不同的 Topic 设置不同的参数值。当前最新的 2.2 版本总共提供了大约 25 个 Topic 级别的参数,当然我们也不必全部了解它们的作用,这里我挑出了一些最关键的参数,你一定要把它们掌握清楚。除了 Topic 级别的参数,我今天还会给出一些重要的 JVM 参数和操作系统参数,正确设置这些参数是搭建高性能 Kafka 集群的关键因素。

Topic 级别参数

说起 Topic 级别的参数,你可能会有这样的疑问:如果同时设置了 Topic 级别参数和全局 Broker 参数,到底听谁的呢?哪个说了算呢?答案就是 Topic 级别参数会覆盖全局 Broker 参数的值,而每个 Topic 都能设置自己的参数值,这就是所谓的 Topic 级别参数。
举个例子说明一下,上一期我提到了消息数据的留存时间参数,在实际生产环境中,如果为所有 Topic 的数据都保存相当长的时间,这样做既不高效也无必要。更适当的做法是允许不同部门的 Topic 根据自身业务需要,设置自己的留存时间。如果只能设置全局 Broker 参数,那么势必要提取所有业务留存时间的最大值作为全局参数值,此时设置 Topic 级别参数把它覆盖,就是一个不错的选择。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kafka集群搭建关键参数设置包括Topic级别参数和JVM参数。文章首先强调了Topic级别参数的重要性,提供了关键参数如`retention.ms`和`max.message.bytes`,并建议使用`kafka-configs`脚本设置。其次,详细讨论了JVM参数设置,建议将堆大小设置为6GB,并根据Java版本选择合适的垃圾回收器。此外,还介绍了操作系统参数的设置,包括文件描述符限制、文件系统类型、swap调优和提交时间。总的来说,文章提供了实用的配置建议和操作指南,适用于读者快速了解Kafka集群搭建的关键参数设置。

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

全部留言(78)

  • 最新
  • 精选
  • 丰富
    G1是jdk9中默认的,jdk8还是需要显式指定的

    作者回复: 嗯嗯,笔误了。多谢纠正 :)

    2019-06-20
    3
    95
  • saup007
    修改 Topic 级 max.message.bytes,还要考虑以下两个吧? 还要修改 Broker的 replica.fetch.max.bytes 保证复制正常 消费还要修改配置 fetch.message.max.bytes

    作者回复: 是的,您考虑得很全面:)

    2019-06-21
    4
    83
  • Hello world
    老师说的无脑配置给jvm heap 6G大小,这应该也看机器的吧,现在机器的内存也越来越大,我们这的机器都是64G 内存,配了16G的heap,老师觉得可以优化吗

    作者回复: 虽然无脑推荐6GB,但绝不是无脑推荐>6GB。一个16GB的堆Full GC一次要花多长时间啊,所以我觉得6GB可以是一个初始值,你可以实时监控堆上的live data大小,根据这个值调整heap size。只是因为大内存就直接调整到16GB,个人觉得不可取。 另外堆越小留给页缓存的空间也就越大,这对Kafka是好事啊。

    2019-06-20
    6
    49
  • 赌神很低调
    胡老师,kafka认为写入成功是指写入页缓存成功还是数据刷到磁盘成功算成功呢?还是上次刷盘宕机失败的问题,页缓存的数据如果刷盘失败,是不是就丢了?这个异常会不会响应给生产者让其重发呢?

    作者回复: 写入到页缓存即认为成功。如果在flush之前机器就宕机了,的确这条数据在broker上就算丢失了。producer端表现如何取决于acks的设定。如果是acks=1而恰恰是leader broker在flush前宕机,那么的确有可能消息就丢失了,而且producer端不会重发——因为它认为是成功了。

    2019-06-24
    7
    35
  • cricket1981
    kafka streams或者ksql的性能参数调优有什么建议和参考资料吗?

    作者回复: Kafka Streams的性能调优建议:https://www.confluent.io/blog/optimizing-kafka-streams-applications KSQL本专栏不会涉及,目前我也给不出相应的建议,因为我。。。。我也不会😳

    2019-06-21
    25
  • 小头针
    胡老师,在本课程最后留的问题,又成功的引起了我的注意,我曾经因为kafka假死,不知原因为何,而尝试过设置Broker的内存为(32G/256G),然而进程假死更加频繁(后面检测是那个版本存在线程死锁)。后来还是设置为16G了。当然我这真真的是无脑设置。我也看到了评论了胡老师的建议,很值得参考。 另外,胡老师在这节课里,讲到了页缓存,我想请问一下这个页缓存它存在的意义和作用,以及它在整个过程中的机制又是怎样的呢?

    作者回复: 页缓存属于磁盘缓存(Disk cache)的一种,主要是为了改善系统性能。重复访问磁盘上的磁盘块是常见的操作,把它们保存在内存中可以避免昂贵的磁盘IO操作。 既然叫页缓存,它是根据页(page)来组织的内存结构。每一页包含了很多磁盘上的块数据。Linux使用Radix树实现页缓存,主要是加速特定页的查找速度。另外一般使用LRU策略来淘汰过期页数据。总之它是一个完全由内核来管理的磁盘缓存,用户应用程序通常是无感知的。 如果要详细了解page cache,可以参见《Understanding the Linux Kernel》一书的第15章

    2019-06-26
    5
    23
  • theivanxu
    最近环境中有一台3G堆内存的节点在某个topic handle request的时候一直OOM,调整到5G重启后恢复正常,很想知道如何评判堆内存大小设置的标准。

    作者回复: 没有通用的标准,只有一个最佳实践值:6GB。最好还是监控一下实时的堆大小,特别是GC之后的live data大小,通常将heapsize设置成其1.5~2倍就足以了

    2019-06-20
    17
  • 张振宇
    老师,怎么能限制消费者的消费速度,或者限制消费带宽啊,

    作者回复: 这是我之前写的,可以参考下:https://www.cnblogs.com/huxi2b/p/8609453.html

    2019-11-19
    3
    13
  • 张洋
    老师我想问下,写入到pageCache 根据配置的时间‘脏数据’Flush到磁盘,kafka 把数据同步到磁盘只在这个地方做吗。意思是:只有每次‘判断’的脏数据才入盘吗,其他的数据呢?

    作者回复: Kafka其实只是把数据写入到pagecache中,后面的刷盘是由os完成的,什么时候刷,刷那些数据都是由os决定

    2020-05-11
    11
  • 王晨光
    老师,kafka消费段,过一段时间jvm内存就会超过设置上线,有什么好的思路调整吗

    作者回复: OOM的问题首先看下到底是那OOM的问题可以这样排查: 1. 到底是哪部分内存。大部分是堆溢出 2. 如果是heap溢出,主要看stacktrace,看看到底是哪段代码导致的 3. 再看导致的原因,到底是内存泄露还是内存溢出。这两者是有区别的。前者是程序写的有问题,后者是程序确实需要这么多内存,那么只能增加heap size 不管怎么样,你可以先增加一下heap size试试,如果还是OOM,那么很有可能出现了内存泄露

    2020-04-13
    11
收起评论
显示
设置
留言
78
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部