赞
踩
目录
Kafka作为一个优秀的开源组件,在业界别广泛使用,kafka官方提供了很多配置,供使用者不同的场景下进行配置以提升kafka的效率,合理的配置将直接提升kafka的吞吐量等,而错误的配置则可能引入生产事故等。本篇博文,从实际使用的角度出发,总结常用的、重要的参数说明及推荐配置值,确保大家能合理的使用kafka。
log.dirs : 用于指定broker的若干个文件目录路径,没有默认值,必须手动指定。
在生产环境一定要给log.dirs配置多个路径,具体的配置格式遵循CSV的格式,用逗号隔开。比如:/app/kafka1,/app/kafka2,/app/kafka3这样。如果有条件尽量保证目录挂载到不同的物理磁盘上。这样做的好处为:
我们具体说说监听器的概念,从构成上来说,它是若干个逗号分隔的三元组,每个三元组的格式为<协议名称,主机名,端口号>。 这里的协议名称可能是标准的名字,比如PLAINTEXT表示明文传输、SSL表示使用SSL或TLS加密传输等;也可能是你自己定义的协议名字,比如CONTROLLER: //localhost:9092。
三元组中的主机名和端口号则比较直观,不需要做过多解释。不过有个事情你还是要注意一下,经常有人会问主机名这个设置中我到底使用IP地址还是主机名。这里我给出统一的建议:最好全部使用主机名,即Broker端和Client端应用配置中全部填写主机名。 Broker源代码中也使用的是主机名,如果你在某些地方使用了IP地址进行连接,可能会发生无法连接的问题。
auto.create.topics.enable参数建议最好设置成false,即不允许自动创建Topic。
unclean.leader.election.enable参数建议设置成false,这个参数是指,是否允许OSR, (与leader副本同步滞后过多的副本(不包括leader)副本)参与lead选举,会影响消息丢失,如果OSR中的副本竞选 leader副本成功,那么其他副本上的数据可能会需要和leader副本数据同步,强制丢弃了数据。
auto.leader.rebalance.enable参数建议设置成false,即不允许自动定期选举leader副本,leader副本的选择是需要一定性能开销,影响kafka的稳定性。
一般使用hours设置消息留存的时间,一般设置log.retention.hours=168 表示默认保存7天的数据,自动删除7天前的数据,对于把kafka当做存储使用的场景,那这个值应该相应的调大。
log.retention.bytes。这个值默认是-1,表明你想在这台Broker上保存多少数据都可以。这个参数真正发挥作用的场景其实是在云上构建多租户的Kafka集群:设想你要做一个云上的Kafka服务,每个租户只能使用100GB的磁盘空间,为了避免有个“恶意”租户使用过多的磁盘空间,设置这个参数就显得至关重要了。
message.max.bytes。实际上今天我和你说的重要参数都是指那些不能使用默认值的参数,这个参数也是一样,默认的1000012太少了,还不到1MB。实际场景中突破1MB的消息都是屡见不鲜的,因此在线上环境中设置一个比较大的值还是比较保险的做法。毕竟它只是一个标尺而已,仅仅衡量Broker能够处理的最大消息大小,即使设置大一点也不会耗费什么磁盘空间的。
当设置broker级别的参数,又设置topic级别的参数后,谁会先说了算了,答案是topic级别的参数会覆盖broker级别的参数,比如topic消息的留存时间,broker的参数是整个服务器级别的, topic级别的参数是针对某个具体的topic进行设置。
虽然kafka服务端代码是用scale语言编写的,但是最终还是编译成class文件在JVm上运行的,因此JVM参数的设置对kafka集群的性能有重要影响。
对应Jdk的版本,建议最低要选择jdk8 ,GC的参数当然要选择G1垃圾回收器,G1回收器会触发更少的Full Gc 需要的调整的参数也更少。
极客时间课程《kafka核心技术与实战》
集群配置上、下篇
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。