最最重要的kafka集群参数配置
一、Broker 端参数
1:Broker是需要配置存储信息的,即Broker使用哪些磁盘,针对存储信息的参数如下:
log.dirs:指定Broker需要使用的若干个文件目录,这个参数没有默认值,这个需要自己指定。
log.dir:他是上一个参数的补充。所以只用设置log.dirs即可。
2:一般线上的生产环境中都会给log.dirs指定多个路径,例如:/opt/kafka1,/opt/kafka2,/opt/kafka3,如果条件允许,最好保证这些目录都挂载到了不同的磁盘上。这样做有两个好处:
第一:实现故障转移,就是坏掉的磁盘上的数据,会自动的转移到其他磁盘上,之前1.1版本之前,只要Broker的任意一个磁盘坏掉,整个Broker进程都会被关闭。
第二:多块物理磁盘同时读写的吞吐量要比单块磁盘高。
二、zookeeper的参数配置
1、zookeeper.connect 可以配置成node1:2181,node2:2181,node3:2181;
2、要是多个kafka集群同时使用一个ZK集群,此时需要使用zk概念中的chroot,可以理解成别名。两个kafka集群分别为:kafkaA,kafkaB,那么zookeeper.connect参数配置成:node1:2181,node2:2181,node3:2181/kafkaA和node1:2181,node2:2181,node3:2181/kafkaB。
三、关于topic的参数
1、auto.create.topics.enable:是否自动允许创建topic。建议使用false,不允许自动创建topic,防止线上环境里面有很多稀奇古怪的topic。
2、unclean.leader.election.enable:是否允许Unclear Leader选举。kafka中的多副本提供高可用,但是只有leader副本只对外提供服务,follower不对外提供服务,这些副本中只有数据保存比较完整比较多的才有资格竞选leader副本,加入保存数据比较多的副本挂掉了,那么还要不要进行Leader选举了?此时该参数就派上用场了,false:坚决不选取哪些落后太多的副本成为leader,这样的后果可能这个分区的数据就不可用了,因为没有leader了;true:允许在比较落后的副本中选一个leader,但是这样有可能导致数据丢失,因为这个副本中保存的数据本来就不全。建议一般生产中使用false吧。
3、auto.leader.rebalance.enable:是否允许定期进行leader选举。**true:**允许kafka定期的进行topic的服务leader选举,当然这个选举并不是无脑的进行,在一定的条件下才会执行。但是确切的说不是选举leader,而是换leader,加入leaderA一直OK,在true的情况下有可能会被强制换成leaderB。换一个leader的代价是很高的。建议生产环境中将该参数设置为false。