虛擬機VMware? Workstation 16 Pro(VMware-16.0.0 build-16894299)上安裝了三個centos7的節(jié)點,IP地址分別為:
192.168.28.128、192.168.28.129、192.168.28.130。
利用xshell訪問三個centos節(jié)點,啟動發(fā)送鍵盤到所有會話 ,即可同時對三個節(jié)點進行操作。
zookeeper集群安裝
下載zookeeper安裝包:
cd /usr/opt
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/apache-zookeeper-3.5.8.tar.gz
tar xf apache-zookeeper-3.5.8-bin.tar.gz -C /usr/local
配置zookeeper:
cd /usr/local
#軟鏈接
ln -sv apache-zookeeper-3.5.8-bin zookeeper
cd /zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
#客戶端與服務(wù)器或者服務(wù)器與服務(wù)器之間每個tickTime時間就會發(fā)送一次心跳。通過心跳不僅能夠用來監(jiān)聽機器的工作狀態(tài),還可以通過心跳來控制Flower跟Leader的通信時間,默認(rèn)2秒
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data/data
dataLogDir=/data/zookeeper/data/log
clientPort=2181
server.1=172.16.150.154:2888:3888
server.2=172.16.150.155:2888:3888
server.3=172.16.150.156:2888:3888
分別在在192.168.28.128~130上執(zhí)行:
mkdir -p /data/zookeeper/data/data
mkdir -p /data/zookeeper/data/log
在192.168.28.128上執(zhí)行:
echo "1" > /data/zookeeper/data/data/myid
在192.168.28.129上執(zhí)行:
echo "2" > /data/zookeeper/data/data/myid
在192.168.28.130上執(zhí)行:
echo "3" > /data/zookeeper/data/data/myid
#######啟動zookeeper并查看日志:
分別在在192.168.28.128~130上執(zhí)行:
cd /usr/local/zookeeper/bin && ./zkServer.sh start
tail /usr/local/zookeeper/logs/zookeeper-root-server-localhost.localdomain.out
驗證zookeeper集群訪問:
分別在在192.168.28.128~130上執(zhí)行:
netstat -nlpt | grep -E "2181|2888|3888"
分別在在192.168.28.128~130上執(zhí)行:
./zkCli.sh -server 192.168.28.128:2181
./zkCli.sh -server 192.168.28.129:2181
./zkCli.sh -server 192.168.28.130:2181
kafka集群安裝
下載kafka安裝包:
cd /usr/opt
wget https://mirror.bit.edu.cn/apache/kafka/2.7.0/kafka_2.13-2.7.0.tgz
tar xf kafka_2.13-2.7.0.tgz -C /usr/local
配置kafka集群:
cd /usr/local
ln -sv kafka_2.13-2.7.0 kafka
cd kafka/config/
cp server.properties server.properties-bak
grep "^[a-Z]" server.properties
vi server.properties
broker.id=1 #唯一
listeners=PLAINTEXT://192.168.28.128:9092 #修改為本機地址
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/data/kafka/data/log
num.partitions=3
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.28.128:2181,192.168.28.129:2181,192.168.28.130:2181 #zokeeper集群地址,以","為分割
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
其他節(jié)點192.168.28.129、192.168.28.130配置相同,除了以下內(nèi)容
#192.168.28.129
broker.id=2
listeners=PLAINTEXT://192.168.28.129:9092 #修改為本機地址
#192.168.28.130
broker.id=3
listeners=PLAINTEXT://192.168.28.130:9092 #修改為本機地址
啟動kafka集群:
./bin/kafka-server-start.sh -daemon config/server.properties
啟動報錯:
[2021-01-10 16:08:35,982] ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING
at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:262)
at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:119)
at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1881)
at kafka.server.KafkaServer.createZkClient$1(KafkaServer.scala:441)
at kafka.server.KafkaServer.initZkClient(KafkaServer.scala:466)
at kafka.server.KafkaServer.startup(KafkaServer.scala:233)
at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:44)
at kafka.Kafka$.main(Kafka.scala:82)
at kafka.Kafka.main(Kafka.scala)
原因:zookeeper.connection.timeout.ms的值太短了,調(diào)大了server.properties文件里的超時時間就可以了
登錄zookeeper驗證,驗證服務(wù)是否正常
cd /usr/local/zookeeper/bin
./zkCli.sh -server 192.168.28.128
get /brokers/ids/1
{"features":{},"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://192.168.28.128:9092"],"jmx_port":-1,"port":9092,"host":"192.168.28.128","version":5,"timestamp":"1610264776275"}
get /brokers/ids/2
{"features":{},"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://192.168.28.129:9092"],"jmx_port":-1,"port":9092,"host":"192.168.28.129","version":5,"timestamp":"1610280011339"}
get /brokers/ids/3
{"features":{},"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://192.168.28.129:9092"],"jmx_port":-1,"port":9092,"host":"192.168.28.129","version":5,"timestamp":"1610280011339"}
創(chuàng)建topic驗證,驗證服務(wù)是否正常
./kafka-topics.sh --create --zookeeper 192.168.28.128:2181 --replication-factor 1 --partitions 1 --topic love
創(chuàng)建主題報錯:
OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
Error while executing topic command : Replication factor: 1 larger than available brokers: 0.
[2021-01-10 15:17:45,154] ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 1 larger than available brokers: 0.
(kafka.admin.TopicCommand$)
原因:kafka集群中的兩個節(jié)點服務(wù)因為連接zookeeper集群服務(wù)超時導(dǎo)致服務(wù)沒有變動起來。
--創(chuàng)建主題
./kafka-topics.sh --create --zookeeper 192.168.28.128:2181 --replication-factor 1 --partitions 1 --topic love
--生產(chǎn)者給該主題發(fā)了個消息
./kafka-console-producer.sh --broker-list 192.168.28.128:9092 --topic love
--消費者收到了消息
./kafka-console-consumer.sh --bootstrap-server 192.168.28.129:9092 --topic love --from-beginning
--消費者收到了消息
./kafka-console-consumer.sh --bootstrap-server 192.168.28.130:9092 --topic love --from-beginning