Kafka使用key-value键值对格式的配置,这些配置即可以在进程启动时,根据指定的properties文件加载,也可以通过编程的方式,在程序中动态指定;根据集群中角色的不同分为6种配置:
- broker配置:broker实例使用的默认配置;
- topic配置:某个topic所使用的配置,如果显式指定,则覆盖broker实例的同名默认配置;
- producer配置:针对producer实例;
- consumer配置:针对consumer实例;
- Connect配置:针对connector实例;
- Stream配置:针对stream实例;
- 管理端配置:用于管理集群权限的配置;
broker配置
常用配置:
- broker.id:用于唯一标识集群中的一个broker实例;每个broker实例的id在集群中必须是全局唯一的;如果未指定,则由zookeeper自动生成;
- log.dirs:区别于log.dir配置,指定日志数据存放路径;若没有指定,则使用log.dir配置指定的路径;如果配置多个路径,则broker会根据"最少使用"原则,把同一个分区的日志保存到同一个路径下;
broker会向拥有最少分区数量的路径下新增分区;
- zookeeper.connect:broker集群所使用的zookeeper集群连接信息;格式:hostname:port/path,多个地址使用逗号分隔;/path是zookeeper的路径,作为kafka集群的chroot环境。默认使用/根路径;如果chroot路径不存在,broker启动时会自动创建;
使用chroot路径是一种最佳实践,可以将zookeeper集群共享给其它应用或者kafka集群使用;
- num.recovery.threads.per.data.dir:每个目录处理消息日志的线程数;默认每个目录使用1个线程;对于有大量partition的broker来说,增加线程数,可以加快消息日志的处理速度;
如下情况会使用消息日志处理线程:
1)服务器正常启动时,用于打开每个分区的日志片段;
2)服务器崩溃重启时,用于检查和截断每个分区的日志片段;
3)服务器正常关闭时,用于关闭日志片段;
- auto.create.topics.enable:如果topic不存在,是否允许自动创建topic;
如下几种情况下会创建topic:
1)生产者写入消息时;
2)消费者读取消息时;
3)客户端发送元数据请求时;
topic配置
topic相关的配置即可以使用broker的默认配置,也可以重写每个topic个自的配置;
- 在创建topic时重写配置:在命令行创建topic时,可以通过--config重写配置;示例如下:
> bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic my-topic --partitions 1 --replication-factor 1 --config max.message.bytes=64000 --config flush.messages=1
- 在更新topic时重写配置:通过--add-config添加配置,示例如下:
> bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name my-topic --alter --add-config max.message.bytes=128000
通过--describe查看配置,示例如下:
> bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name my-topic --describe
通过--delete-config删除配置,示例如下:
> bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name my-topic --alter --delete-config max.message.bytes
各个模块详细配置详见官方文档;