Broker端参数设置:
kafka broker端参数也被称为静态参数,所谓静态参数,是指你必须在kafka的配置文件serve.properties中进行设置的参数,只要有修改,就必须重启broker进程才能令它们生效。
存储信息相关参数:
log.dirs:指定了broker需要使用的若干个文件目录路径。
log.dir:表示单个路径。
一般你只要设置log.dirs就可以,多个的话采用csv格式,即用逗号隔开。如果有条件的话最好将这些目录挂载到不同的物理磁盘上,这样有两个好处:
1、提升读写性能:比起单块磁盘,多块物理磁盘同时读写数据有更高的吞吐量。
2、能够实现故障转移:即Failover。坏掉的磁盘上的数据会自动地转移到其他正常的磁盘上,而且broker还能正常工作。
ZooKeeper相关的设置:
zookeeper.connect:是一个csv格式的参数,比如zk1:2181,zk2:2181,zk3:2181
多个kafka使用同一套ZooKeeper集群,如两套集群kafka1和kafka2可以指定为zk1:2181,zk2:2181,zk3:2181/kafka1和zk1:2181,zk2:2181,zk3:2181/kafka2
Borker连接相关的配置
listeners:监听器,指定外部连接者要通过什么协议访问指定主机名和端口开放的kafka服务。若干个逗号分隔的三元组,每个三元组的格式为<协议名称,主机名,端口号>,
比如CONTROLLER: //localhost:9092。一旦自己定义了协议名称,还必须指定listener.security.protocol.map参数告诉这个协议底层使用了哪种安全协议,比如:listener.security.protocol.map=CONTROLLER:PLAINTEXT表示CONTROLLER
这个自定义协议底层使用明文不加密传输数据。
advertised.listeners:Advertised的含义表示宣称的,公布的,就是说这组监听器是broker用于对外发布的。
host.name/port:这两个参数key用设置,过期的参数。
最好全部用主机名,即broker端和client端应用配置中全部填写主机名。broker源代码中也使用的是主机名,如果在某些地方使用了IP地址进行连接,可能会发现无法连接问题。
Topic管理相关参数:
auto.create.topic.enable:是否允许自动创建topic。建议设置成false,即不允许自动创建Topic。
unclean.leader.election.enable:是否允许Unclean Leader选举。设置成false,坚决不能让那些落后太多的副本竞选Leader。这个做的后果就是这个分区不可用了,因为没有leader。设置成true,那么kafka允许你从那些“跑得慢”的副本中选一个出来
当leader。这样做的后果是数据可能丢失,因为这些副本保存的数据本来就不全,这个参数在最新版的kafka中默认就是false,建议设置成false。
auto.leader.rebalance.enable:是否允许定期进行leader选举。设置成true表示允许kafka定期对一些topic分区进行leader重选举,它不是选leader,而是换leader!比如leaderA一直表现很好,但若这个参数设置成true,那么有可能一段时间后leaderA就要被强行卸任换成leaderB。换一次leader的代价很高,原本向A发送请求的所有客户端都要切换成向B发送请求,而且换leader本质上,没有任何性能收益,因此建议设置成false。
数据留存参数设置
log.retention.{hours|minutes|ms}:从优先级上来说ms设置最高、minutes次之、hours最低。比如log.eatention.hours=7表示默认保存7天的数据。
log.retention.bytes:这是指定broker为消息保存的总磁盘容量大小。默认为-1,表示你想在这条broker上保存多少数据都可以。这个参数真正发挥作用的场景其实是在云上构建kafka集群:设想你要做一个云上的卡夫卡服务,每个租户只能使用100GB的磁盘空间,为了避免有个“恶意”使用过多的磁盘空间,设置这个参数就显得至关重要。
message.max.bytes:控制broker能够接收的最大消息大小。