前言
之前有篇写kafka集群的搭建,但是不太完整,重新整理了一篇 。更强调实验。包括topic创建、查看 producer生产 consumer去消费。
zookeeper这里就没讲安装步骤 可以直接去有一篇写好的看
然后这里我的集群是 had-node2 had-node3 had-node4 三台
一、安装zookeeper
安装zookeeper之前一定要确保三台机器时钟同步
安装查看:
https://blog.youkuaiyun.com/weixin_45783164/article/details/105491110
二、kafka的安装
- 下载安装包(http://kafka.apache.org)
○ kafka_2.11-1.0.0.tgz - 规划安装目录
○ /export/servers/kafka - 上传安装包到服务器中
- 解压安装包到指定规划目录
○ tar -zxvf kafka_2.11-1.0.0.tgz - 修改配置文件
○ 在had-node2上修改
§ 进入到kafka安装目录下有一个config目录
□ vi server.properties
# had-node2
broker.id=0
listeners=PLAINTEXT://had-node2:9092
advertised.listeners=PLAINTEXT://had-node2: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=/tmp/kafka-logs
num.partitions=5
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=24
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
# 连接
zookeeper.connect=had-node2:2181,had-node3:2181,had-node4:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
# 可删除topic
delete.topic.enable=true
配置kafka环境变量
vi /etc/profile
export KAFKA_HOME=/export/servers/kafka
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile
- 分发kafka安装目录到其他节点
scp -r kafka root@had-node3:/export/servers
scp -r kafka root@had-node4:/export/servers
scp /etc/profile node2:/etc
scp /etc/profile node3:/etc
- 修改node2和node3上的配置
并修改每个节点对应的server.properties
文件的broker.id和listenrs
:
broker.id=1
listeners=PLAINTEXT://had-node3:9092
advertised.listeners=PLAINTEXT://had-node3:9092
broker.id=2
listeners=PLAINTEXT://had-node4:9092
advertised.listeners=PLAINTEXT://had-node4:9092
三、kafka集群启动和停止
1、启动
- 先启动zk集群
- 然后在所有节点执行脚本
bin/kafka-server-start.sh config/server.properties &
- 或者可以写个 一键启动kafka脚本
vim start_kafka.sh
#!/bin/sh
for host in {had-node2,had-node3,had-node4}
do
ssh $host "source /etc/profile;nohup kafka-server-start.sh /export/servers/kafka/config/server
.properties >/dev/null 2>&1 &"
echo "$host kafka is running"
done
2、停止
在所有节点执行脚本
需要修改信息 kafka-server-stop.sh
这个脚本的逻辑就是通过下面的命令获取kafka进程号,这个默认的kafka集群是获取不到(脚本有问题)
原始:
PIDS=$(ps ax | grep -i 'kafka\.Kafka' | grep java | grep -v grep | awk '{print $1}')
再所有的节点都需要修改成:
PIDS=$(ps ax | grep -i 'kafka' | grep java | grep -v grep | awk '{print $1}')
可以在所有节点执行:
kafka-server-stop.sh
也可以写个 一键停止kafka脚本
vim stop_kafka.sh
#!/bin/sh
for host in node1 node2 node3
do
ssh $host "source /etc/profile;nohup /export/servers/kafka/bin/kafka-server-stop.sh&"
echo "$host kafka is stopping"
done
四、kafka的命令行的管理使用
1、创建topic
kafka-topics.sh
bin/kafka-topics.sh --create --zookeeper had-node2:2181, had-node3:2181, had-node4:2181 --replication-factor 3 --partitions 3 --topic kafkatest
2、查询所有的topic
kafka-topics.sh
bin/kafka-topics.sh --describe --zookeeper had-node2:2181, had-node3:2181, had-node4:2181 --topic kafkatest
bin/kafka-topics.sh --list --zookeeper had-node2:2181, had-node3:2181, had-node4:2181
3、模拟生产者写入数据到topic中
kafka-console-producer.sh
kafka-console-producer.sh --broker-list had-node2:9092 -topic kafkatest
4、模拟消费者拉取topic中的数据
kafka-console-consumer.sh
bin/kafka-console-consumer.sh --bootstrap-server had-node2:9092, had-node3:9092, had-node4:9092 --topic kafkatest --from-beginning
或
kafka-console-consumer.sh --zookeeper node1:2181,node2:2181,node3:2181 --topic test --from-beginning
(但不知道为什么显示没有zookeeper这个命令)
5、删除topic
bin/kafka-topics.sh --delete --zookeeper had-node2:2181, had-node3:2181, had-node4:2181 --replication-factor 3 --partitions 3 --topic kafkatest
五、出现的问题
呜呜呜 真的出现了很多问题
包括若集群不统一
在指定kafka-logs里的meta 文件的id 要和 servers.p 那个文件的id保持一致
如果有错误可以查看日志文件
还有集群部分的kafka起不起来的问题 其实就是因为id 不一致