----总结自《kafka 权威指南》
broker.id:broker 的标识符,默认为 0。可设置为任意整数,这个值在 kafka 集群里必须要是唯一的。
port:设置监听端口。如果使用 1024 以下的端口,Linux 需要使用 root 权限启动才能启动 kafka。
zookeeper.connect:保存 broker 元数据的 zookeeper 地址。该配置参数是用冒号分隔的一组 hostname:/port/path(path 是可选的 zookeeper 路径,默认为根路径) 列表。如果指定的 chroot 路径不存在,kafka 会在启动的时候创建它。
log.dirs:指定保存消息的本地文件系统路径,如果指定了多个路径,broker 会根据最少使用原则,把同一个分区的日志片段保存到同一个路径下面。broker 会往拥有最小数目分区的路径新增分区,而不是往拥有最小磁盘空间的路径新增分区。
num.recovery.threads.per.data.dir:
对于以下3种情况,kafka 会使用可配置的线程池来处理日志片段:
服务器正常运行,用于打开每个分区的日志片段。 服务器崩溃后重启,用于检查和截断每个分区的日志片段。 服务器正常关闭,用于关闭日志片段。默认情况下,每个日志目录只使用一个线程,可以设置大量的线程来达到并行操作的目的。该参数所对应的是 log.dirs 指定的单个日志目录。
auto.create.topics.enable:
默认情况下,kafka 会在下面情况下自动创建主题:
当一个生产者开始往主题里写数据时。 当一个消费者开始向主题里读数据时。 当任意一个客户端向主题发送元数据时。该参数设置为 false,表示需要手动或者通过其他配置系统来创建主题。
num.partitions:指定了新创建的主题包含多少个分区。如果启动了主题自动创建功能 atuo.create.topics.enable(该功能默认是开启的),主题分区个数就是该参数指定的值。
log.retention.ms:决定数据可以被保留多久,默认为 168 小时(一周)。除此之外,还有 log.retention.minutes 和 log.retention.ms 都是决定消息多久以后会被删除。如果指定了不止一个参数,kafka 会优先使用具有最小值的那个参数。
根据时间保留数据是通过检查磁盘上日志文件的最后修改时间来实现的。一般来说,最后修改时间指的是日志片段关闭的时间,也就是文件里最后一个时间戳。不过,如果使用管理工具在服务器间易懂噢分区,最后修改时间就不准确了。
log.retention.bytes:通过保留的消息字节数来判断消息是否过期,作用在每一个分区上。
如果同时指定了 log.retention.bytes 和 log.retention.ms,只要任意一个条件得到满足,消息就会被删除。
log.segment.bytes:当消息到达 broker 时,它们会被追加到分区的当前日志片段上。当日志片段大小达到 log.segment.bytes 指定的上限时,当前日志片段就会被关闭,一个新的日志片段被打开。
日志片段的大小会影响时间戳获取偏移量,kafka 在使用时间戳获取日志偏移量时,会检查分区里最后修改时间大于指定时间戳的已关闭的日志片段。然后,kafka 返回该日志片段开头的偏移量,对于使用时间戳获取偏移量的操作来说,日志片段越小,结果越准确。
log.segment.ms:指定了多长时间之后日期片段会被关闭。和 log.segment.bytes 一起使用,也是看哪个条件满足了当前日志片段就关闭。使用基于时间的日志片段,要着重考虑并行关闭多个日志片段对磁盘性能的影响
。
message.max.bytes:限制单个消息压缩后
的大小,默认值是 1000000(1MB)。如果生产者尝试发送的消息超过这个大小,就会收到 broker 返回的错误信息。
在进行硬件选择的时候我们要考虑集合会影响整体性能的因素:磁盘吞吐量、磁盘容量、内存、网络、CPU