Kafka -- 二、Kafka的配置说明
[toc]
配置说明
broker配置
常规配置
- broker.id:broker的标识符,在集群中必须是唯一的
- port:默认是9092
- zookerper.connect:指定zookeeper服务的地址和端口
- log.dirs:指定Kafka消息持久化路径,可以是一组逗号隔开的本地文件系统路径,会按分区把数据写入这些路径
- num.recover.threads.per.data.dir
- Kafka会使用线程池来处理日志片段,但只有中服务器启动或关闭的时候才会用到,来并发的处理数据
- 如果有三个目录,且本参数设置为8,则会有24个线程并发处理
- auto.create.topics.enable:Kafka的主题可以不创建直接使用,生产者推送数据的时候会自动创建主题(消费也会触发),这个参数用来配置是否自动创建
主题的默认配置
- num.partitions
- 分区数量
- 分区数量是个很重要的参数,由于一个分区最多被一个消费组中的一个消费者消费(其实就是最多就只能被一个消费者消费),所以分区数量是消费的瓶颈,需要综合生产速度和单个消费速度来决定分区的数量
- 还要考虑磁盘空间和带宽因素
- 分区数越多内存占用越多,首领选举需要的时间越长,所以不能单纯的扩展分区数量
- log.retention.ms:数据保留时间,默认是一周
- log.retention.bytes:每个分区的存储空间,默认是1G(上面的时间和这个空间,只要有一个条件符合就会触发删除)
- log.segment.bytes
- 要先介绍一下,Kafka日志被分为段,当消息填满一个片段的时候,这个片段就会被关闭写入到一个文件,打开一个新的片段来接收消息,片段被关闭后才开始过期等待(主要原因还是为每个消息做独立的过期管理开销太大)
- 这个参数就是配置片段的大小,同样就需要根据业务来决定配置大小,太小,那么会频繁的关闭和分配新文件,带来频繁IO开销,太大,如果过来的数据量小,那数据过期时间可能会远超我们的预期(一个片段1G,每天过来100M消息,十天后数据开始过期等待,如果我们期望一周过期,实际却是17天才过期)
- log.segment.ms:应该是为了平衡上面的空间设置,达到这个时间条件时一个片段也会关闭
- message.max.bytes:指定单个消息的最大长度,超过这个长度会报错,可以通过压缩来传递更多消息
硬件选择
- 磁盘吞吐量:SSD会是更好的选择,但也要考虑价格,可以通过挂载多块机械硬盘来实现IO并发(分区指定到不同磁盘的目录上)
- 磁盘容量:取决于需要存储的数据(数据规模和保留时长)
- 内存:消费者需要把日志片段加载到缓存中进行读取
- 网络:带宽应该是最大的瓶颈,生产者、消费者、集群复制都需要占用带宽,别的性能都可以通过broker来进行扩展
- CPU:要求较小,数据压缩和解压以及设置偏移量会用到
集群

需要多少个broker
- 第一是考虑磁盘需求,假如需要10T,每个broker有2T空间,那至少要5个broker,如果启用了复制(一个备份的情况),那就要翻倍为10个broker
- 第二是性能:需要考虑broker的网络吞吐能力,如何面对洪峰等
broker配置
- 一个集群中所有的broker需要配置相同的zookeeper服务
- 配置独立等id
生产环境调优
- 垃圾回收器选项:这个其实就是使用了JAVA的垃圾回收
- 数据中心:最好把broker安装到不同的机架,这样一个broker出现问题时,还有别的备份活着
- zookeeper:虽然Kafka对zookeeper的占用不高,但为了避免不确定因素,最好还是不要和别的程序共享zookeeper服务
