1、Topic 级别参数

如果同时设置了 Topic 级别参数和全局 Broker 参数,Topic 级别参数会覆盖全局 Broker 参数的值,而每个 Topic 都能设置自己的参数值,这就是所谓的 Topic 级别参数。

  1. retention.ms: 该 Topic 消息被保存的时长,会覆盖掉 Broker 端的全局参数值。

  2. retention.bytes: 该 Topic 预留多大的磁盘空间,当前默认值是 -1,表示可以无限使用磁盘空间,在多租户的 Kafka 集群中用到。

  3. max.message.bytes: Topic 的最大消息大小。

Topic 设置方式(🎉Kafka官方文档🎉):

  • 创建 Topic 时设置

–config 后面指定了想要设置的 Topic 级别参数。

1
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic my-topic --partitions 1 --replication-factor 1 --config retention.ms=15552000000 --config max.message.bytes=5242880
  • 修改 Topic 时设置
1
 bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name my-topic --alter --add-config max.message.bytes=10485760

2、JVM 参数

Java7 中,如果 Broker 所在机器的 CPU 资源非常充裕,则建议开启 CMS 垃圾回收器, -XX:+UseCurrentMarkSweepGC。否则,使用吞吐量收集器。开启方法是指定 -XX:+UseParallelGC

Java8 中,建议使用 G1 垃圾回收器。

建议使用 Java8。

  1. KAFKA_HEAP_OPTS: 堆大小, 建议为 6GB,这是比较公认的合理值。

  2. KAFKA_JVM_PERFORMANCE_OPTS: 指定 GC 参数。

比如你可以这样启动 Kafka:

1
2
3
export KAFKA_HEAP_OPTS=--Xms6g  --Xmx6g
export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true
bin/kafka-server-start.sh config/server.properties

3、操作系统参数

主要系统参数:

  • 文件描述符限制

执行命令 ulimit -n 1000000 来设置。

  • 文件系统类型

XFS 的性能要强于 ext4。

  • Swappiness

将 swap 交换内存配置成一个接近 0 但不为 0 的值,比如 1。

  • 提交时间

向 Kafka 发送数据并不是真要等数据被写入磁盘才会认为成功,而是只要数据被写入到操作系统的页缓存(Page Cache)上就可以了,随后操作系统根据 LRU 算法会定期将页缓存上的"脏"数据落盘到物理磁盘上。这个定期就是由提交时间来确定的,默认是 5 秒。由于 Kafka 的多副本的冗余机制,可以稍微拉大提交间隔来提高性能。

0%