1. 程式人生 > >Kafka_2.12-2.5.1叢集搭建與引數調優

Kafka_2.12-2.5.1叢集搭建與引數調優

Kafka是目前業界使用最廣泛的訊息佇列。資料流轉常見這樣的業務場景,客戶端把採集到的日誌推送給Kafka,業務方可以消費Kafka的資料落地HDFS,用於離線分析,也可以使用Spark或Flink消費Kafka中的資料,用於實時計算。Kafka在資料流轉過程中發揮著紐帶作用,可用於日誌採集和資料處理系統間的解耦。 本文將介紹搭建Kafka叢集的詳細安裝步驟,並根據日常業務遇到的問題,對Linux系統和Kafka節點的配置引數進行調優。 # 1. 環境說明 |元件|版本|說明| |:-|:-|:-| |Kafka|2.12-2.5.1|| |Zookeeper|3.5.8|5個節點| |JDK|1.8.0_144|| 伺服器配置: ``` CPU:【2*Intel(R) Xeon(R) Silver 4214 Processor 12 Cores 24 Threads 2.20 GHz】 記憶體:【8*16G DDR4-2666 ECC 1.2v RDIMM】 機械硬碟:【12*4T 7200轉 3.5寸 SATA介面】 網絡卡:萬兆網絡卡 Linux系統:centos7.6 ``` # 2.初始化各個節點基礎環境 * 安裝jdk1.8 ``` 下載jdk1.8.0_144,並解壓到/usr/local目錄 ``` * 關閉swap 若不關閉swap,記憶體頻繁與磁碟空間交換,會有增加gc時間的風險。 ``` #臨時生效 swapoff -a #永久生效 echo 'swapoff -a' >> /etc/rc.d/rc.local ``` * 修改最大檔案開啟數 Linux預設配置的最大檔案開啟數為1024,若Kafka的寫入和消費方比較多,會很容易超過預設值,導致broker異常關閉。 ``` #臨時生效 ulimit -n 102400 #檢視open files 個數 ulimit -a | grep 'open files' #永久生效 vim /etc/security/limits.conf * soft nofile 102400 * hard nofile 102400 ``` # 3.搭建zk叢集 搭建5個節點的zk叢集,可保證在最多掛兩個zk節點的情況下,zk叢集依然可以正常對外提供服務。 zk叢集搭建步驟參見上篇博文:[zookeeper-3.5.8叢集搭建](https://www.cnblogs.com/ljhbjehp/p/13888412.html) # 4. 中轉機上配置一份Kafka ## 下載解壓 ``` 從官網下載一份kafka_2.12-2.5.1程式壓縮包,解壓到當前目錄。 ``` ## 修改配置 * 修改bin/kafka-server-start.sh檔案 配置日誌列印目錄、開放JMX埠、依賴的JDK,以及JVM記憶體。 ``` vim bin/kafka-server-start.sh export LOG_DIR="/var/log/kafka" export JMX_PORT="2020" export JAVA_HOME="/usr/local/jdk1.8.0_144" if [ "x$KAFKA_HE:AP_OPTS" = "x" ]; then export KAFKA_HEAP_OPTS="-Xmx6G -Xms6G" fi ``` * 修改bin/kafka-run-class.sh 配置JVM的垃圾回收器G1引數。 ``` vim bin/kafka-run-class.sh export JAVA_HOME="/usr/local/jdk1.8.0_144" #其他指令碼呼叫該shell,需要JDK環境 KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:MetaspaceSize=96m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80" ``` * 修改config/server.properties檔案 ``` vim config/server.properties broker.id=10* listeners=PLAINTEXT://host_name:9090 # 在寫入量150MB/s,讀取量300MB/s的情況下,使用以下兩個配置,網路執行緒和磁碟IO執行緒平均空閒率大約30%。 num.network.threads=6 num.io.threads=12 log.dirs=/data*/kafka-logs #根據具體情況而定 log.retention.hours=48 zookeeper.connect=zk1.bjehp.com:2181,zk2.bjehp.com:2181,zk3.bjehp.com:2181,zk4.bjehp.com:2181,zk5.bjehp.com:2181/kafka/talos #注意修改zookeeper地址 auto.create.topics.enable=false default.replication.factor=2 #以下注釋為Kafka預設引數,注意zk的連線時間與超時時間由0.8版本的6s提高到現版本的18s. #offsets.topic.replication.factor=3 #transaction.state.log.replication.factor=3 #transaction.state.log.min.isr=2 #group.initial.rebalance.delay.ms=3000 #zookeeper.connection.timeout.ms=18000 #zookeeper.session.timeout.ms=18000 ``` # 5. 在各個節點安裝並啟動Kafka ## 安裝 * 同步安裝包 ``` 將中轉機的Kafka安裝包拷貝到本地/usr/local/目錄 ``` * 根據機器實際情況修改server.properties配置檔案 ``` vim /usr/local/kafka_2.12-2.5.1/config/server.properties broker.id=10* #修改broker id引數 log.dirs=/data*/kafka-logs #根據實際情況修改log目錄 listeners=SASL_PLAINTEXT://hostname:9090 #修改hostname ``` ## 啟動並驗證 ``` nohup /usr/local/kafka_2.12-2.5.1/bin/kafka-server-start.sh /usr/local/kafka_2.12-2.5.1/config/server.properties > /dev/null 2>&1 & ps aux | grep kafka tailf /var/log/kafka/server.log netstat -tnlp | grep 9090 netstat -tnlp | grep 2020 ``` ## 停止 ``` /usr/local/kafka_2.12-2.5.1/bin/kafka-server-stop.sh ``` # 6.服務運維 ## 定時清除日誌 ``` vim /etc/cron.d/kafka-logclean # 每天定時清除1天前的kafka日誌檔案 5 4 * * * root find /var/log/kafka/*.log.* -type f -mtime +1 | xargs rm -f ``` ## 配置監控報警 * 配置伺服器的磁碟、記憶體、cpu load報警 * 配置Kakfa節點埠報警 # 總結 本文介紹了Kakfa叢集的詳細搭建步驟,以及Linux系統和Kafka節點的引數調優。近些年隨著Kafka版本不斷迭代,之前的舊版本的bug(比如0.8版本)也不斷被修復,並且不斷有新功能湧現,比如流量配額、exactly-once語義等,使得Kafka叢集越來越穩定,這將明顯降低叢集故障。Kafka在很多功能點的實現上有很多巧妙的設計,值得不斷地深入學習和