kafka集群参数配置

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yujianping_123/article/details/96874189

kafka可配置参数有很多,2.2版本中broker就将近200个参数,topic大概25个。

绝大多数采用默认值即可,下面就说下一般不采用默认值的一些配置参数的设置。

broker参数:

log.dirs:信息储存在磁盘哪里,设置多个路径,比如:/home/kafka1,/home/kafka2,/home/kafka3。最好这些dirs是mount到不同物理磁盘上。好处是:提升读写性能、故障转移,防止磁盘坏了导致broker进程关闭,相当于简约RAID方案

zookeeper.connect:zookeeper在kafka中充当分布式协调框架的作用,负责协调管理和保存kafka集群的所有Meta数据,比如集群有哪些broker在运行,有哪些topic,以及每个topic有哪些partition,partition中leader replica在哪些机器上。一套kafka集群它的值为zk1:2181,zk2:2181,zk3:2181.如果有2套kafka集群,设置zk1:2181,zk2:2181,zk3:2181/kafka1、zk1:2181,zk2:2181,zk3:2181/kafka2,kafka1和kafka2是kafka集群的名字。

listeners:监听器,即外部连接者通过协议://主机名:端口号访问开放的kafka服务。这里的主机名最好是主机名,而不是ip地址。listeners一般结合listener.security.protocol.map一起用,即指定哪种安全协议,如controller:plaintext 明文不加密的方式传输数据

另外,关于topic的几个参数最好设置成false,比如

auto.create.topics.enable 不允许自动创建topic,否则topic名乱七八糟的

unclean.leader.election.enable 不允许让落后太多的replica竞选leader,否则可能会发生消息丢失

数据留存参数:

log.retention.hour=168:即保存7天数据

log.retention.bytes=-1:不限制容量

message.max.bytes:默认值还不到1M,可以适当放大。

replica.lag.time.max.ms :follower副本允许落后leader副本的最长时间间隔,默认10秒,ISR副本集合 in-sync-replicas 。 leader副本天然在ISR副本中,满足(10秒)条件的follower副本也在ISR中。

生产上如果有消息丢失的情况,检查下下面这些参数是否设置合理

1. unclean.leader.election.enable = false

2. replication.factor >=3:将消息多冗余几份

3. min.insync.replicas >= 2,消息至少要被写入2个副本才算是‘已提交’,1个leader副本,至少1个follower副本

4. retries >0 ,producer端参数,防止网络抖动,自动重试消息发送,在网络不稳定的时候可以考虑。acks = all,表示所有副本broker全部接收到消息才算是‘已提交’。另外,producer.send(msg, callback),callback可以知道消息到底发送成功了没有。

5.  enable.auto.commit = false, 这是consumer端参数,采用手动提交offset 。特别是当consumer端是多线程处理时,offset提交了,但是线程处理出错了。

顺便说下,标记read-only的参数:重启broker才能生效, 还有一部分是可动态配置的,即无需重启broker即可生效。

标记有:

per-broker:只在对应的broker上生效

cluster-wide:适用整个集群范围

最可能需要用到的动态调整参数有:

log.retention.ms :日志保存时间

num.io.threads, num.network.threads:broker端各种线程池大小

命令 kafka-configs 可动态修改参数

kafka将动态broker参数保存在Zookeeper中 - /config/brokers

Topic参数:

topic参数和broker参数,就好像是局部和全局变量的关系,以topic参数为准。

一般就数据预存参数message.max.bytes,最好根据具体的topic单独设置。

设置topic级别的参数有2种方式:创建topic 时设置,另一个是修改参数

kafka有kafka-topics命令来创建topic,结尾处使用--config设置topic参数;另一个用kafka-configs来修改参数。

JVM参数:

kafka_heap_opts:指定堆大小,默认是1GB,这可能太小了,最好设置大点,社区推荐是6GB。

kafka_jvm_performance_opts:指定GC参数,java8默认是新生代垃圾回收器UseParallelGC,可以调整为G1收集器。

具体做法是先设置这两个环境变量,然后再启动kafka broker。

export kafka_heap_opts=--Xms6g  --Xmx6g

export kafka_jvm_performance_opts= -server -XX:UseG1GC

kafka-server-start.sh config/server.properties

操作系统参数:

文件描述符系统:ulimit -n 1000000

文件系统系统:kafka支持XFS,甚至是ZFS,这些文件系统性能比ext4,ext3要好很多。

swappiness :默认是0,即不使用swap空间,当物理内存耗尽时,oom killer会随机kill掉一个进程。建议还是设置成1.

提交时间:默认是5秒,即kafka数据被写到操作系统page cache后,5秒后,操作系统根据LRU算法将cache上的数据真正写入到物理磁盘中。kafka有replica 冗余机制,不用担心cache会丢失,所以设置大一点也没关系。

猜你喜欢

转载自blog.csdn.net/yujianping_123/article/details/96874189