已安装完jdk1.8
https://blog.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/qq_34319644/article/details/96462930?utm_medium=distribute.pc_relevant.none-task-blog-title-1&spm=1001.2101.3001.4242
参考文档:
kafka原理:
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.youkuaiyun.com/vegetable_bird_001/article/details/51858915
https://www.dazhuanlan.com/2020/01/17/5e20cab78e9b4/