Centos7 搭建Kafka集羣

1. 準備

#安裝Java運行環境JRE,下載Server Jre上傳到tmp目錄
mkdir /usr/java;\
tar xf /tmp/server-jre-8u181-linux-x64.tar.gz -C /usr/java;\
ln -s /usr/java/jdk1.8.0_181 /usr/java/default;\
tee -a /etc/profile << 'EOF'
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
EOF

#生效環境變量
source /etc/profile

#下載部署包
wget -c -P /tmp/ https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/1.1.1/kafka_2.11-1.1.1.tgz;\
mkdir /opt/kafka;\
tar xf /tmp/kafka_2.11-1.1.1.tgz -C /opt/kafka

#添加用戶及目錄
useradd -s /sbin/nologin kafka;\
mkdir -p /home/kafka/data/kafka /home/kafka/data/zookeeper

2. Zookeeper

2.1 配置zookeeper.properties

mv /opt/kafka/kafka_2.11-1.1.1/config/zookeeper.properties /opt/kafka/kafka_2.11-1.1.1/config/zookeeper.properties_bak;\
tee /opt/kafka/kafka_2.11-1.1.1/config/zookeeper.properties << 'EOF'
#數據目錄,不建議放到程序內,因爲更新到時候容易丟,應該放在統一到數據目錄
dataDir=/home/kafka/data/zookeeper

#zookeeper中使用的基本時間單位, 毫秒值
tickTime=2000

#這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶連接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集羣中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個 tickTime 時間間隔數。這裏設置爲5表名最長容忍時間爲 5 * 2000 = 10 秒
initLimit=10

#這個配置標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5 * 2000 = 10秒
syncLimit=5

#客戶端連接的端口
clientPort=2181

#每個IP最大客戶端連接數,0表示關閉限制
maxClientCnxns=1000

#節點信息
server.41=192.168.1.41:2888:3888
server.42=192.168.1.42:2888:3888
server.43=192.168.1.43:2888:3888
EOF

2.2 配置myid

#zookeeper node-1
echo "41"  > /home/kafka/data/zookeeper/myid

#zookeper node-2
echo "42"  > /home/kafka/data/zookeeper/myid

#zookeeper node-3
echo "43"  > /home/kafka/data/zookeeper/myid

2.3 添加Systemd服務

tee /etc/systemd/system/zookeeper.service << 'EOF'
[Unit] 
Description=Apache Zookeeper server (Kafka) 
Documentation=http://zookeeper.apache.org 
Requires=network.target remote-fs.target  
After=network.target remote-fs.target 
[Service] 
Type=simple 
User=kafka 
Group=kafka 
Environment=JAVA_HOME=/usr/java/default 
ExecStart=/opt/kafka/kafka_2.11-1.1.1/bin/zookeeper-server-start.sh /opt/kafka/kafka_2.11-1.1.1/config/zookeeper.properties 
ExecStop=/opt/kafka/kafka_2.11-1.1.1/bin/zookeeper-server-stop.sh 
[Install] 
WantedBy=multi-user.target
EOF

2.4 啓動

chown -R kafka. /home/kafka/data /opt/kafka;\
systemctl daemon-reload;\
systemctl enable zookeeper;\
systemctl start zookeeper;\
systemctl status zookeeper

2.5 打開防火牆

firewall-cmd --add-port=2181/tcp --permanent;\
firewall-cmd --add-port=2888/tcp --permanent;\
firewall-cmd --add-port=3888/tcp --permanent;\
firewall-cmd --reload

2.6 查看

/opt/kafka/kafka_2.11-1.1.1/bin/zookeeper-shell.sh 192.168.1.41:2181

使用參考:https://my.oschina.net/tongyufu/blog/1806196

3. Kafka

3.1 配置server.properties

mv /opt/kafka/kafka_2.11-1.1.1/config/server.properties /opt/kafka/kafka_2.11-1.1.1/config/server.properties_bak;\
tee /opt/kafka/kafka_2.11-1.1.1/config/server.properties << 'EOF'
#非負整數,用於唯一標識broker,不同節點該值必須不一樣,比如 1,2,3
broker.id=41

# broker 發佈給生產者消費者的hostname,會存儲在zookeeper。配置好這個host可以實現內網外網同時訪問。
listeners=PLAINTEXT://192.168.1.41:9092

#borker進行網絡處理的線程數
num.network.threads=3

#borker進行I/O處理的線程數
num.io.threads=8

#發送緩衝區buffer大小,數據不是一下子就發送的,先回存儲到緩衝區了到達一定的大小後在發送,能提高性能
socket.send.buffer.bytes=102400

#kafka接收緩衝區大小,當數據到達一定大小後在序列化到磁盤
socket.receive.buffer.bytes=102400

#這個參數是向kafka請求消息或者向kafka發送消息的請請求的最大數,這個值不能超過java的堆棧大小
socket.request.max.bytes=104857600

#kafka存放消息的目錄
log.dirs=/home/kafka/data/kafka/kafka-logs

#每個topic默認partition數量,根據消費者實際情況配置,配置過小會影響消費性能
num.partitions=30

# kafka啓動恢復日誌,關閉前日誌刷盤的線程數,如果是raid的盤的話適當增加,比如3
num.recovery.threads.per.data.dir=2

#是否允許刪除topic,開發環境應該是true,測試及生產環境應該是false
delete.topic.enable=true

#每個topic的副本數量,默認爲1,生產最好3個以上
offsets.topic.replication.factor=3

transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1


#日誌刷盤機制默認,10000條刷一次,1秒刷一次
#log.flush.interval.messages=10000
#log.flush.interval.ms=1000

#日誌保留時間,默認爲7天,如果量大,可以酌情改小,比如三天
log.retention.hours=168

#日誌保留大小,默認是保留1G,生產上可以配置爲下面50G
log.retention.bytes=53687091200

#The interval at which log segments are checked to see if they can be deleted according
# to the retention policies
log.retention.check.interval.ms=300000

#Zookeeper host和port ,這個看zookeeper環境而設置
zookeeper.connect=192.168.1.41:2181,192.168.1.42:2181,192.168.1.43:2181

#Zokeeper 連接超時時間
zookeeper.connection.timeout.ms=6000

#是讓coordinator推遲空消費組接收到成員加入請求後本應立即開啓的rebalance。在實際使用時,假設你預估你的所有consumer組成員加入需要在10s內完成,那麼你就可以設置該參數10000
group.initial.rebalance.delay.ms=10000

EOF

3.2 server.properties分節點特殊配置

#kafka node-1
sed -i '/broker.id=/c\broker.id=41' /opt/kafka/kafka_2.11-1.1.1/config/server.properties;\
sed -i '/listeners=/c\listeners=PLAINTEXT://192.168.1.41:9092' /opt/kafka/kafka_2.11-1.1.1/config/server.properties

#kafka node-2
sed -i '/broker.id=/c\broker.id=42' /opt/kafka/kafka_2.11-1.1.1/config/server.properties;\
sed -i '/listeners=/c\listeners=PLAINTEXT://192.168.1.42:9092' /opt/kafka/kafka_2.11-1.1.1/config/server.properties

#kafka node-3
sed -i '/broker.id=/c\broker.id=43' /opt/kafka/kafka_2.11-1.1.1/config/server.properties;\
sed -i '/listeners=/c\listeners=PLAINTEXT://192.168.1.43:9092' /opt/kafka/kafka_2.11-1.1.1/config/server.properties

3.3 添加Systemd服務

tee /etc/systemd/system/kafka.service << 'EOF'
[Unit] 
Description=Apache Kafka server (broker) 
Documentation=http://kafka.apache.org/documentation.html 
Requires=network.target remote-fs.target  
After=network.target remote-fs.target zookeeper.service 
[Service] 
Type=simple 
User=kafka 
Group=kafka 
Environment=JAVA_HOME=/usr/java/default 
ExecStart=/opt/kafka/kafka_2.11-1.1.1/bin/kafka-server-start.sh /opt/kafka/kafka_2.11-1.1.1/config/server.properties 
ExecStop=/opt/kafka/kafka_2.11-1.1.1/bin/kafka-server-stop.sh 
[Install] 
WantedBy=multi-user.target

EOF

3.4 啓動

chown -R kafka. /home/kafka/data /opt/kafka;\
systemctl daemon-reload;\
systemctl enable kafka;\
systemctl start kafka;\
systemctl status kafka

3.5 防火牆

firewall-cmd --add-port=9092/tcp --permanent;\
firewall-cmd --reload

3.6 查看


#查看topic
/opt/kafka/kafka_2.11-1.1.1/bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --list

#創建topic
/opt/kafka/kafka_2.11-1.1.1/bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --create --replication-factor 1 --partitions 1 --topic test

#刪除topic
/opt/kafka/kafka_2.11-1.1.1/bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --delete --topic test
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章