存储信息参数 | log.dirs | 这是非常重要的参数,指定了 Broker 需要使用的若干个文件目录路径。要知道这个参数是没有默认值的,这说明什么?这说明它必须由你亲自指定。 | 在线上生产环境中一定要为log.dirs配置多个路径,用逗号分隔的多个路径,比如/home/kafka1,/home/kafka2,/home/kafka3 |
存储信息参数 | log.dir | 注意这是 dir,结尾没有 s,说明它只能表示单个路径,它是补充上一个参数用的。 | 只能表示单个路径,它是补充上一个参数用的,一般不设置。 |
ZooKeeper配置 | zookeeper.connect | ZooKeeper连接端口 | 也是一个 CSV 格式的参数,比如我可以指定它的值为zk1:2181,zk2:2181,zk3:2181。2181 是 ZooKeeper 的默认端口。如果你有两套 Kafka 集群,假设分别叫它们 kafka1 和 kafka2,那么两套集群的zookeeper.connect参数可以这样指定:zk1:2181,zk2:2181,zk3:2181/kafka1和zk1:2181,zk2:2181,zk3:2181/kafka2。切记 chroot 只需要写一次,而且是加到最后的。 |
客户端程序或其他 Broker 如何与该 Broker 进行通信 | listeners | 学名叫监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。 | |
客户端程序或其他 Broker 如何与该 Broker 进行通信 | advertised.listeners | 和 listeners 相比多了个 advertised。Advertised 的含义表示宣称的、公布的,就是说这组监听器是 Broker 用于对外发布的。 | |
Topic 管理 | auto.create.topics.enable | 是否允许自动创建 Topic | 建议最好设置成 false |
Topic 管理 | unclean.leader.election.enable | 是否允许 Unclean Leader 选举 | 建议显式地把它设置成 false |
Topic 管理 | auto.leader.rebalance.enable | 是否允许定期进行 Leader 选举 | 建议生产环境中把这个参数设置成 false |
数据留存 | log.retention.{hours|minutes|ms} | 这是个“三兄弟”,都是控制一条消息数据被保存多长时间。从优先级上来说 ms 设置最高、minutes 次之、hours 最低。 | 通常情况下我们还是设置 hours 级别的多一些,比如log.retention.hours=168表示默认保存 7 天的数据,自动删除 7 天前的数据。很多公司把 Kafka 当作存储来使用,那么这个值就要相应地调大。 |
数据留存 | log.retention.bytes | 这是指定 Broker 为消息保存的总磁盘容量大小。 | 默认是 -1,表明你想在这台 Broker 上保存多少数据都可以。这个参数真正发挥作用的场景其实是在云上构建多租户的 Kafka 集群:设想你要做一个云上的 Kafka 服务,每个租户只能使用 100GB 的磁盘空间,为了避免有个“恶意”租户使用过多的磁盘空间,设置这个参数就显得至关重要了。 |
数据留存 | message.max.bytes | 控制 Broker 能够接收的最大消息大小。 | 默认的 1000012 太少了,还不到 1MB。实际场景中突破 1MB 的消息都是屡见不鲜的,因此在线上环境中设置一个比较大的值还是比较保险的做法。毕竟它只是一个标尺而已,仅仅衡量 Broker 能够处理的最大消息大小,即使设置大一点也不会耗费什么磁盘空间的。 |