kafka集群2.6的安装及相关优化

已安装完jdk1.8
https://blog.csdn.net/weixin_43067223/article/details/86144700
rpm -ivh jdk-8u211-linux-x64.rpm 

前提:找好奇数台机器,因为kafka数据存放在磁盘里面,

对内存要求大于8,数据未进入磁盘之前数据在内存

1.主机ip和主机名称

10.202.252.242  p43149v.hulk.shbt.qihoo.net
10.202.254.65 p43143v.hulk.shbt.qihoo.net
10.202.252.193 p43145v.hulk.shbt.qihoo.net

主机名字更改方法,不更改用主机ip也行
https://blog.csdn.net/qq_39629343/article/details/80253121

2.zookper

下载路径:https://downloads.apache.org/zookeeper/zookeeper-3.4.14/

在zookper下面新建/home/peiyajie/zookeeper/data
 mv zoo_sample.cfg zoo.cfg

修改zoo.cfg里面配置dataDir的值为刚才新增的data路径

dataDir=/home/peiyajie/zookeeper/data

新增
server.1=p43149v.hulk.shbt.qihoo.net:2888:3888
server.2=p43143v.hulk.shbt.qihoo.net:2888:3888
server.3=p43145v.hulk.shbt.qihoo.net:2888:3888

在刚才的data下面新增文件

/home/peiyajie/zookeeper/data
 vi myid 
 对应上面的配置server.1后面的整数值

将配置好的zookper复制到另外两台服务器
scp -r zookeeper p43143v.hulk.shbt.qihoo.net:/home/peiyajie/
scp -r zookeeper p43145v.hulk.shbt.qihoo.net:/home/peiyajie/

只需要修改myid的值为对应的2,3

zookper启动:./bin/zkServer.sh start  

zookper查看角色:./bin/zkServer.sh status

3.kafka

下载kafka文件:
https://www.apache.org/dyn/closer.cgi?path=/kafka/2.6.0/kafka_2.13-2.6.0.tgz
/home/peiyajie/kafka/config/server.properties

修改配置

listeners=PLAINTEXT://p43143v.hulk.shbt.qihoo.net:9092

broker.id=2
zookeeper.connect=p43149v.hulk.shbt.qihoo.net:2181,p43143v.hulk.shbt.qihoo.net:2181,p43145v.hulk.shbt.qihoo.net:2181

将配置好的kafka复制到其他两台服务器
 scp -r kafka p43143v.hulk.shbt.qihoo.net:/home/peiyajie/
scp -r kafka p43145v.hulk.shbt.qihoo.net:/home/peiyajie/

启动kafka

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


#创建 topic 
./bin/kafka-topics.sh --create --zookeeper p43149v.hulk.shbt.qihoo.net:2181,p43143v.hulk.shbt.qihoo.net:2181,p43145v.hulk.shbt.qihoo.net:2181 --replication-factor 3 --partitions 3 --topic peiyajie.test

#显示 topic 信息
./bin/kafka-topics.sh --describe --zookeeper p43149v.hulk.shbt.qihoo.net:2181,p43143v.hulk.shbt.qihoo.net:2181,p43145v.hulk.shbt.qihoo.net:2181 --topic peiyajie.test

#列出topic
./bin/kafka-topics.sh --list --zookeeper p43149v.hulk.shbt.qihoo.net:2181,p43143v.hulk.shbt.qihoo.net:2181,p43145v.hulk.shbt.qihoo.net:2181

#删除 topic
./bin/kafka-topics.sh --delete --zookeeper p43149v.hulk.shbt.qihoo.net:2181,p43143v.hulk.shbt.qihoo.net:2181,p43145v.hulk.shbt.qihoo.net:2181 --topic peiyajie.test

#关闭服务
./bin/kafka-server-stop.sh

./bin/kafka-console-producer.sh --broker-list p43149v.hulk.shbt.qihoo.net:9092,p43143v.hulk.shbt.qihoo.net:9092,p43145v.hulk.shbt.qihoo.net:9092 -topic peiyajie.test


./bin/kafka-console-consumer.sh --bootstrap-server p43149v.hulk.shbt.qihoo.net:9092,p43143v.hulk.shbt.qihoo.net:9092,p43145v.hulk.shbt.qihoo.net:9092 --topic peiyajie.test --from-beginning

https://blog.csdn.net/qq_34319644/article/details/96462930?utm_medium=distribute.pc_relevant.none-task-blog-title-1&spm=1001.2101.3001.4242

参考文档:

kafka原理:

https://blog.csdn.net/khuangliang/article/details/107776046?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduend~default-4-107776046.nonecase&utm_term=kafka%E6%95%B0%E6%8D%AE%E5%AD%98%E5%9C%A8%E5%93%AA

https://kafka.apachecn.org/

kafka优化:

Kafka读写单位是partition,不同的partition位于不同的磁盘。如果多个进程同时对一个磁盘多个文件进行赌侠,使操作系统会对磁盘读写频繁调度,也就破坏了磁盘的读写连续性

log.dirs=/disk1/kafka-logs,/disk2/kafka-logs,/disk3/kafka-logs 

同一个消费者组中的消费者和partition在同一时间必须保证一对一消费关系,任意一个partition在某一时刻只能被消费组中的一个消费者消费,一个消费者可以同时消费多个partion

内存优化

服务端多核CPU、JVM内存占用较大的应用(至少大于4G),应用在运行过程中会产生大量内存碎片、需要经常压缩空间

想要更可控、可预期的GC停顿周期;防止高并发下应用雪崩现象。

kafka的kafka-run-class.sh 中已经包含了

KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true"

所以只需要修改kafka-server-start.sh。这里面将内存设置为4G,因为当前kafka的堆内存使用了800多M,1个G的内存不够用。但是分配太多,也没什么用,还容易影响到pagecache,降低效率:

kafka-server-start.sh

export KAFKA_HEAP_OPTS="-Xms4g -Xmx4g"

1.处理线程数

用于接收并处理网络请求的线程数,默认为3。其内部实现是采用Selector模型。启动一个线程作为Acceptor来负责建立连接,再配合启动num.network.threads个线程来轮流负责从Sockets里读取请求,一般无需改动,除非上下游并发请求量过大。一般num.network.threads主要处理网络io,读写缓冲区数据,基本没有io等待,配置线程数量为cpu核数加1.

num.io.threads主要进行磁盘io操作,高峰期可能有些io等待,因此配置需要大些。配置线程数量为cpu核数2倍,最大不超过3倍.

# broker处理消息的最大线程数

 num.network.threads=xxx

 # broker处理磁盘IO的线程数

 num.io.threads=xxx

2. log数据文件刷盘策略
为了大幅度提高producer写入吞吐量,需要定期批量写文件。
建议配置

# 每间隔1秒钟时间,刷数据到磁盘

log.flush.interval.ms=1000

3. 日志保留策略配置

当kafka server的被写入海量消息后,会生成很多数据文件,且占用大量磁盘空间,如果不及时清理,可能磁盘空间不够用,kafka默认是保留7天。
建议配置:

# 保留三天,也可以更短

log.retention.hours=72

# 段文件配置1GB,有利于快速回收磁盘空间,重启kafka加载也会加快(如果文件过小,则文件数量比较多,

# kafka启动时是单线程扫描目录(log.dir)下所有数据文件)

log.segment.bytes=1073741824

Tips

Kafka官方并不建议通过Broker端的log.flush.interval.messages和log.flush.interval.ms来强制写盘,认为数据的可靠性应该通过Replica来保证,而强制Flush数据到磁盘会对整体性能产生影响。

可以通过调整/proc/sys/vm/dirty_background_ratio和/proc/sys/vm/dirty_ratio来调优性能。

脏页率超过第一个指标会启动pdflush开始Flush Dirty PageCache。

脏页率超过第二个指标会阻塞所有的写操作来进行Flush。

根据不同的业务需求可以适当的降低dirty_background_ratio和提高dirty_ratio。

如果topic的数据量较小可以考虑减少log.flush.interval.ms和log.flush.interval.messages来强制刷写数据,减少可能由于缓存数据未写盘带来的不一致

https://blog.csdn.net/vegetable_bird_001/article/details/51858915

https://www.dazhuanlan.com/2020/01/17/5e20cab78e9b4/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值