配置最佳实践
auto.create.topics.enable=false #不要自动创建Topic。
unclean.leader.election.enable=false #要C不要A
auto.leader.rebalance.enable=false #会乱换leader,切换代价很大。
log.dirs=/var/kafka/d1,/var/kafka/d2 #最好多个挂载点目录
replica.lag.time.max.ms #默认10秒,副本不同步最大容忍时间
#replica.lag.max.messages #0.9已经移除,默认4000条,副本条目与Leader差距最大值,将移除ISR
broker相关
listeners: # Server监听的。
advertised.listeners:# 发给用户的。
过期参数:host.namehost.port
topic相关
命令
Topic相关
创建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 3 --topic foo-topic
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic foo-topic
查看Topic信息
bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic foo
bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic foo --command-config config/client.properties
修改分区数
bin/kafka-topics.sh --bootstrap-server localhost:9092 --alter --topic luna_bar --partitions 3
生产消费数据
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic luna_foo
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic luna_foo
查看消费者组
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章节
export KAFKA_HEAP_OPTS=--Xms6g --Xmx6g
GC设置
export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true