●log.dir:配置单个路径,用于上个参数的补充。
通常情况下,我们只需要设置log.dirs即可。而且建议配置多个路径,比如:/home/kafka1,/home/kafka2,/home/kafka3。并且,如果条件允许,最好将这些目录挂载到不同的物理磁盘。这样做有两个好处:
●提升读写性能。多块物理磁盘同时读写数据具有更高的吞吐量
●故障转移(Failvoer)。在之前Kafka Broker任何一块磁盘挂掉,整个Broker都会停止提供服务。在Kafka1.1开始,坏掉的磁盘上的数据会自动转移到其他正常磁盘上,并且Broker还能正常工作。
如果需要让多个Kafka集群使用同一个Zookeeper集群,这个参数应该怎么设置?chroot是Zookeeper的概念,类似于别名。
如果你有两套 Kafka 集群,假设分别叫它们kafka1和kafka2,那么两套集群的zookeeper.connect参数可以这样指定:zk1:2181,zk2:2181,zk3:2181/kafka1和zk1:2181,zk2:2181,zk3:2181/kafka2。切记 chroot 只需要写一次,而且是加到最后的。
●advertised.listeners:和 listeners 相比多了个 advertised。Advertised 的含义表示宣称的、公布的,就是说这组监听器是 Broker 用于对外发布的。
监听器的格式:<协议名称,主机名,端口号>。比如protocol://host:port
●unclean.leader.election.enable:是否允许Unclean Leader选举
●auto.leader.rebalance.enable:是否允许定期选举
auto.create.topics.enable在线上生产环境一定要改为false,特别是将Kafka用作基础组件,会出现各种稀奇古怪的topic。运维需要严格把控Topic的创建。
unclean.leader.election.enableUnclean Leader选举,建议设置为false。解释一下unclean,就是那些同步数据落后太多的partition。最新版Kafka默认是false,即不允许落后太多的副本进行Leader选举。如果设置为true,那么那些同步较为落后的副本也会参与选举,如果选为Leader,其他副本就会截取掉多余的数据,造成数据丢失。
但是。假设那些保存数据较多的副本都挂了,并且参数设置为false,服务将会不可用。如果设置为true,这时参数就派上用场了,可以从同步较慢的主机中选择leader,虽然丢失数据,Broker还是可以提供服务。
auto.leader.rebalance.enable如果设置为true,表示允许Kafka定期对一些Topic的partition进行Leader重选举。上个参数发生在Leader故障的情况,这个参数和它不同的是,他不是选Leader,而是定期换Leader。比如尽管LeaderA表现一直很有好,但是参数设置为true的情况下,有可能会强行换副本B为Leader。换一次Leader的代价很高,并且这种操作实质上没有任何性能收益,故建议设置为false
●log.retention.bytes:指定 Broker 为消息保存的总磁盘容量大小。
●message.max.bytes:控制 Broker 能够接收的最大消息大小。
log.retention.hours=168默认设置,表示保存7天,自动删除七天前的数据,通常情况下,在保证磁盘空间足够时,我们尽量将这个值调大。
log.retention.bytes=-1默认设置,代表不限制Broker容量。
message.max.bytes=1000012默认还不到1MB,这个值需要进行调整,线上环境超过1MB的消息场景还是比较多的,设置一个比较大的值比较保险。
●retention.bytes:设置为该Topic预留多大的磁盘空间,默认为-1,不做限制。
●max.message.bytes:如果公司的Kafka作为基础组件,上面跑的业务数据是比较多的,全局参数较难均衡,可以为每个Topic定制消息大小。
比如使用自带的命令kafka-configs来修改 Topic 级别参数,将发送最大值设置为10MB。
bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name transaction --alter --add-config max.message.bytes=10485760
●KAFKA_JVM_PERFORMANCE_OPTS:指定 GC 参数
比如,在启动Broker前,可以这样进行设置:
$> export KAFKA_HEAP_OPTS=--Xms6g --Xmx6g
$> export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true
$> bin/kafka-server-start.sh config/server.properties
●文件系统类型:文件系统指的是如 ext3、ext4 或 XFS 这样的日志型文件系统。根据官网的测试报告,XFS 的性能要强于 ext4,所以生产环境最好还是使用 XFS。
●Swappiness:很多文章建议设置为0,将swap禁用避免Kafka进程使用swap空间。但是当物理内存耗尽时,操作系统会触发OOM killer,随机挑选一个进程然后kill掉,根本不给用户任何预警。
但如果设置成一个比较小的值,当开始使用 swap 空间时,你至少能够观测到 Broker 性能开始出现急剧下降,从而给你进一步调优和诊断问题的时间。比如 1
●提交时间:即Flush落盘时间。向 Kafka 发送数据并不是真要等数据被写入磁盘才会认为成功,而是只要数据被写入到操作系统的页缓存(Page Cache)上就可以了,随后操作系统根据 LRU 算法会定期将页缓存上的“脏”数据落盘到物理磁盘上。这个定期就是由提交时间来确定的,默认是 5 秒。一般情况下我们会认为这个时间太频繁了,可以适当地增加提交间隔来降低物理磁盘的写操作。当然你可能会有这样的疑问:如果在页缓存中的数据在写入到磁盘前机器宕机了,那岂不是数据就丢失了。的确,这种情况数据确实就丢失了,但鉴于 Kafka 在软件层面已经提供了多副本的冗余机制,因此这里稍微拉大提交间隔去换取性能还是一个合理的做法。
免责申明:
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!
《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu
《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack