一.Broker 端参数
Broke存储信息配置
- log.dirs:非常重要,指定Broker需要使用的若干文件目录路径,没有默认值必须亲自指定。
- log.dir:他只能表示单个路径,补充上一个参数用。
如何设置:
- 只要设置log.dirs,不要设置log.dir
- 线上环境一定要为log.dirs配置多个路径,具体格式为CSV格式,比如:/home/kafka1,/home/kafka2,/home/kafka3
最好保证这些目录挂载到不同的物理磁盘上:
- 提升读写性能:多块磁盘同时读写数据有更高吞吐量
- 能实现故障转移:Failover
- kafka1.1以前:Broker使用的任何一块磁盘挂掉,整个Broker进程都会被关闭
- 1.1之后:坏掉的磁盘的数据会自动转移到其他正常的磁盘上,而且Broker还能正常工作。
二.Zookeeoer的相关配置:
- Zookeeper是什么
- 分布式协调框架,负责协调管理并保存kafka集群的所有元数据信息,比如集群中有哪些Broker运行,创建哪些Topic,每个Topic多个分区,以及分区的Leader副本在哪些机器上等信息。
Zookeeper.connect
- 这也是CSV格式的参数,比如zk1:2181,zk2:2181,zk3:2181
- 多个kafka使用同一套zookeeper集群,使用chroot,类似于别名。
三.客户端程序或者其他Broker与该Broker的配置:
- listeners:监听器,告诉外部连接者要通过什么协议访问指定主机名和端口开放kafka的服务。
- advertised.listeners:和listeners相比多了个advertised。Advertised含义是公开的,因此这组 监听器是Broker对外公布的。
监听器的概念:
- 他是由若干个逗号分隔的三元组,每个三元组格式为<协议名称,主机号,端口号>
- listener.security.protocol.map参数告诉这个协议底层使用了哪种安全协议
- 这里我给出统一的建议:最好全部使用主机名,即 Broker 端和 Client 端应用配置中全部填写主机名。
四.Topic 配置
auto.create.topics.enable:是否允许自动创建Topic
- 参数建议最好设置成false,避免创建名字稀奇古怪的Topic。
unclean.leader.election。enable
- 能否让落户的副本竞选Leader。
- 如果是false:坚决不让落后太多的副本竞选Leader,这样会导致分区不可用,因为没有Leader选出
- 如果是true,那么kafka允许从慢的副本中选出一个Leader,这样会导致数据丢失,因为副本数据本身就不全,当成为Leader以后就会以他的为准。
- 这个参数新版默认false;
auto.leader.rebalance.enable:是否允许定期选举Leader
- 对生产环境影响较大
- 换Leader,本身没有收益建议换成false;
五.数据存留配置
log.retention.{hours|minutes|ms}
- 控制一条消息数据保存多长时间,优先级是ms>minutes>hours
- 通常情况下设置hours级别多一些,比如log.retention.hours=168表示7天后删除,自动删除7天前的数据。
log.retention.bytes:
- 指定 Broker 为消息保存的总磁盘容量大小。
message.max.bytes:控制 Broker 能够接收的最大消息大小。
- 默认的 1000012 太少了,还不到 1MB。实际场景中突破 1MB 的消息都是屡见不鲜的,因此在线上环境中设置一个比较大的值还是比较保险的做法。毕竟它只是一个标尺而已,仅仅衡量 Broker 能够处理的最大消息大小,即使设置大一点也不会耗费什么磁盘空间的。