1、Topic 级别参数
如果同时设置了 Topic 级别参数和全局 Broker 参数,Topic 级别参数会覆盖全局 Broker 参数的值,而每个 Topic 都能设置自己的参数值,这就是所谓的 Topic 级别参数。
retention.ms
: 该 Topic 消息被保存的时长,会覆盖掉 Broker 端的全局参数值。retention.bytes
: 该 Topic 预留多大的磁盘空间,当前默认值是 -1,表示可以无限使用磁盘空间,在多租户的 Kafka 集群中用到。max.message.bytes
: Topic 的最大消息大小。
Topic 设置方式(🎉Kafka官方文档🎉):
- 创建 Topic 时设置
–config 后面指定了想要设置的 Topic 级别参数。
|
|
- 修改 Topic 时设置
|
|
2、JVM 参数
Java7 中,如果 Broker 所在机器的 CPU 资源非常充裕,则建议开启 CMS 垃圾回收器, -XX:+UseCurrentMarkSweepGC
。否则,使用吞吐量收集器。开启方法是指定 -XX:+UseParallelGC
。
Java8 中,建议使用 G1 垃圾回收器。
建议使用 Java8。
KAFKA_HEAP_OPTS
: 堆大小, 建议为 6GB,这是比较公认的合理值。KAFKA_JVM_PERFORMANCE_OPTS
: 指定 GC 参数。
比如你可以这样启动 Kafka:
|
|
3、操作系统参数
主要系统参数:
- 文件描述符限制
执行命令 ulimit -n 1000000
来设置。
- 文件系统类型
XFS 的性能要强于 ext4。
- Swappiness
将 swap 交换内存配置成一个接近 0 但不为 0 的值,比如 1。
- 提交时间
向 Kafka 发送数据并不是真要等数据被写入磁盘才会认为成功,而是只要数据被写入到操作系统的页缓存(Page Cache)上就可以了,随后操作系统根据 LRU 算法会定期将页缓存上的"脏"数据落盘到物理磁盘上。这个定期就是由提交时间来确定的,默认是 5 秒。由于 Kafka 的多副本的冗余机制,可以稍微拉大提交间隔来提高性能。