文章目录
集群规划
Host | ip |
---|---|
k8s-node3 | 192.168.0.52 |
k8s-node5 | 192.168.0.109 |
k8s-node8 | 192.168.0.115 |
环境准备、
- 安装好JDK并设置好环境变量
- 关闭防火墙
- ssh免密登录
- 搭建zookeeper集群
[集群搭建方式见]Zookeeper集群搭建
kafka安装包下载解压
[root@k8s-node5 config]# wget https://archive.apache.org/dist/kafka/3.0.1/kafka_2.12-3.0.1.tgz
[root@k8s-node5 software]# tar -xzvf kafka_2.12-3.0.1.tgz
[root@k8s-node5 software]# cd kafka_2.12-3.0.1/
[root@k8s-node5 kafka_2.12-3.0.1]# cd config/
[root@k8s-node5 config]# view server.properties
配置文件server.properties
# 集群的唯一ID
broker.id=0
# 网络线程的处理数
num.network.threads=3
# I/O处理的线程数
num.io.threads=8
# 发送缓存区大小
socket.send.buffer.bytes=102400
# 接收缓冲区大小
socket.receive.buffer.bytes=102400
# Kafka请求或者接收请求的最大字节数
socket.request.max.bytes=104857600
# 日志目录
log.dirs=/home/software/kafka_2.12-3.0.1/kafka-logs/
# 默认的分区数,一个topic默认只有一个分区.
num.partitions=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# The number of messages to accept before forcing a flush of data to disk
# 日志刷入磁盘的间隔周期
#log.flush.interval.ms=1000
# 日志保留时长(小时)
log.retention.hours=168
# 日志保留的最大大小
#log.retention.bytes=1073741824
# 这个个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件
log.segment.bytes=1073741824
# 日志时效时间检测的间隔周期
log.retention.check.interval.ms=300000
# zookeper集群地址,使用逗号分隔开
zookeeper.connect=k8s-node3:2181,k8s-node6:2181,k8s-node8:2181
# zookeeper连接超时时间
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0
将修改好配置文件的安装包分发到其他两台服务器,并修改broker.id为不同的值。
启动器群
在三台服务器上分别执行如下命令,启动集群
[root@k8s-node8 bin]# cd /home/software/kafka_2.12-3.0.1/bin
[root@k8s-node8 bin]# ./kafka-server-start.sh -daemon ../config/server.properties
[root@k8s-node8 bin]# jps
7629 Kafka
可以查看到kafka正常启动
kafka-topics.sh操作
创建topic
- –bootstrap-server: 指定kafka的服务器节点,hostname:port,多个节点使用“,”分割,eg:k8s-node3:9092,k8s-node5:9092
- –create: 指定操作类型为创建topic
- –topic :指定创建的topic的名称
- –partitions 1:指定分区为1
- –replication-factor 1
- –config cleanup.policy=compact
[root@k8s-node3 bin]# cd /home/software/kafka_2.12-3.0.1/bin/
[root@k8s-node3 bin]# ./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic mytopic
Created topic mytopic.
查看topic列表
[root@k8s-node3 bin]# ./kafka-topics.sh --bootstrap-server localhost:9092 --list
__consumer_offsets
mytopic
查看指定topic的具体信息
[root@k8s-node3 bin]# ./kafka-topics.sh --bootstrap-server localhost:9092 --topic mytopic --describe
Topic: mytopic TopicId: qKovnrJDQluPIKjL9inYXw PartitionCount: 1 ReplicationFactor: 1 Configs: segment.bytes=1073741824
Topic: mytopic Partition: 0 Leader: 0 Replicas: 0 Isr: 0
删除topic
[root@k8s-node3 bin]# ./kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic mytopic
[root@k8s-node3 bin]# ./kafka-topics.sh --bootstrap-server localhost:9092 --list
__consumer_offsets
问题:有时候会因为一些特殊导致topic没有被彻底删除,明明在–list中看不到该topic,但是创建时却提示,该topic已存在,这种情况下要怎么样彻底删除呢?
[root@k8s-node3 bin]# ./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic sensor
Error while executing topic command : Topic 'sensor' already exists.
[2022-04-28 04:06:02,041] ERROR org.apache.kafka.common.errors.TopicExistsException: Topic 'sensor' already exists.
(kafka.admin.TopicCommand$)
- 一、检查topic相关的存储目录(在server.properties文件log.dirs配置的目录),看是否被删除,如果没有删除手工删除
- 二、在zookeeper上查看,检查是否被删掉,如下所示,发现果然没有被删除掉
[root@k8s-node3 bin]# zkCli.sh
[zk: localhost:2181(CONNECTED) 4] ls /brokers/topics
[__consumer_offsets, mytopic, sensor, sensor3]
[zk: localhost:2181(CONNECTED) 5]
- 三、在zookeeper中删除topic信息
[root@k8s-node3 bin]# zkCli.sh
[zk: localhost:2181(CONNECTED) 4] ls /brokers/topics
[__consumer_offsets, mytopic, sensor, sensor3]
[zk: localhost:2181(CONNECTED) 5] deleteall /brokers/topics/sensor
[zk: localhost:2181(CONNECTED) 5] deleteall /brokers/topics/sensor3
以上操作完毕后,再次执行创建topic就能够创建成功
[root@k8s-node3 bin]# ./kafka-topics.sh --bootstrap-server k8s-node3:9092,k8s-node5:9092,k8s-node8:9092 --create --topic sensor
Created topic sensor.
[root@k8s-node3 bin]#
运行一个productor,发送消息
[root@k8s-node3 bin]# ./kafka-console-producer.sh --broker-list k8s-node3:9092,k8s-node5:9092 --topic mytopic
>hello,world
>hello,world
运行一个consumer,接收消息
[root@k8s-node3 bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.0.52:9092 --topic mytopic
hello,world
hello,world