配置最佳实践

  1. auto.create.topics.enable=false #不要自动创建Topic。
  2. unclean.leader.election.enable=false #要C不要A
  3. auto.leader.rebalance.enable=false #会乱换leader,切换代价很大。
  4. log.dirs=/var/kafka/d1,/var/kafka/d2 #最好多个挂载点目录
  5. replica.lag.time.max.ms #默认10秒,副本不同步最大容忍时间
  6. #replica.lag.max.messages #0.9已经移除,默认4000条,副本条目与Leader差距最大值,将移除ISR

broker相关

  1. listeners: # Server监听的。
  2. advertised.listeners:# 发给用户的。

过期参数:
host.name
host.port
topic相关

命令

Topic相关

创建topic

  1. bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 3 --topic foo-topic
  2. bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic foo-topic

查看Topic信息

  1. bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic foo
  2. bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic foo --command-config config/client.properties

修改分区数

  1. bin/kafka-topics.sh --bootstrap-server localhost:9092 --alter --topic luna_bar --partitions 3

生产消费数据

  1. bin/kafka-console-producer.sh --broker-list localhost:9092 --topic luna_foo
  2. bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic luna_foo

查看消费者组

  1. bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group foo

其他知识

log.dirs

最好指定挂在不同磁盘的多路径。如果指定了多个路径,那么 broker 会根据“最少使 用”原则,把同一个分区的日志片段保存到同一个路径下。注意:broker 会往拥有最少数目分区的路径新增分区,而不是往拥有最小磁盘空间的路径新增分区。

acks

1代表leader接收到并确认。-1和all代表ISR列表里至少min.insync.replicas数副本同步了数据才返回成功。

硬件选择

机械硬盘(HDD)很划算。Kafka会顺序向磁盘追加写入(Append-Only),规避机械硬盘的最大劣势——随机读写慢。
最好多挂载点。1.1版本前任何一块磁盘挂掉整个Broker会关闭。1.1版本后,坏掉磁盘数据会转移到其他磁盘,Broker仍然正常。有了这个机制RAID不是特别必要。

JVM

JVM堆大小配置,6g最优。出自极客时间Kafka08章节

  1. export KAFKA_HEAP_OPTS=--Xms6g --Xmx6g

GC设置

  1. export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true