@TOC
一、Kafka集群部署
1.1 部署Zookeeper
Kafka依赖zookeeper对Kafka服务器broker进行监控,所以需要先部署zookeeper,部署可见
1.2 Kafka基本参数介绍
1.2.1 重要参数
参数 | 含义 |
broker.id=0 | 类似于zookeeper的myid |
log.dirs=/home/kafka/logs | 指定了Broker存储log文件的目录,多个目录逗号隔开 |
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181 | 指定了zookeeper的连接,,如果部署多套kafka集群则配置为zk1:2181,zk2:2181,zk3:2181/kafka1和zk1:2181,zk2:2181,zk3:2181/kafka2 |
listeners=PLAINTEXT://localhost:9092 | 外部连接者要通过什么协议访问指定主机名和端口开放的Kafka服务,默认为本机9092端口 |
advertised.listeners=PLAINTEXT://localhost:9092 | Broker用于对外发布的监听器,不配置时默认为listeners配置,云主机或docker中用到,需要配置为宿主机ip与port |
num.partitions=1 | 默认的分区数,一个topic默认1个分区数 |
auto.create.topics.enable=false | 是否允许自动创建Topic,建议置为false,否则可能会有莫名其妙的topic |
unclean.leader.election.enable=false | 是否允许数据落后的副本参与选举,建议置为false,否则可能会引起脏数据 |
auto.leader.rebalance.enable=false | 定期切换leader(正常的),但是切换一次代价大,建议置为false |
log.retention.{hours|minutes|seconds}=? | 控制一条消息数据被保存多长时间。从优先级上来说ms设置最高、minutes次之、hours最低 |
log.retention.bytes=-1 | 指定Broker为消息保存的总磁盘容量大小,默认是-1表示不限制 |
message.max.bytes=5242880 | 控制Broker能够接收的最大消息大小,默认是1000012不足1M,应该设置的大一些。 |
default.replication.factor=3 | kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务 |
min.insync.replicas=2 | 控制消息写入多少个副本后算已提交,默认为1,实际环境建议大于1。default.replication.factor>min.insync.replicas,否则一个副本挂掉后,便无法提交消息。建议default.replication.factor=min.insync.replicas+1 |
log.cleaner.enable=false | 是否启用log压缩,一般不用启用,启用的话可以提高性能 |
1.2.2 其余配置
############################# Server Basics #############################
# 全局唯一id
broker.id = 1
############################# Socket Server Settings #############################
# 指定内网访问ip与端口
listeners=PLAINTEXT://localhost:9092
# 指定对外暴露端口,配置为宿主机ip与port
# advertised.listeners=PLAINTEXT://宿主机ip:9092
# 网络并发线程数
num.network.threads=3
# IO并发线程数
num.io.threads=8
# Socket发送缓冲区
socket.send.buffer.bytes=102400
# Socket接收缓冲区
socket.receive.buffer.bytes=102400
# 服务器能接收的最大字节数,防止OOM
socket.request.max.bytes=104857600
############################# Log Basics #############################
# 日志数据存储路径
log.dirs=/root/kafka/logs-1
# 默认的partitions数目
num.partitions=3
# 单个日志目录重新加载时线程数,将此值提高有利于提升重启或恢复效率
num.recovery.threads.per.data.dir=1
# 控制Broker能够接收的最大消息大小,应该设置的大一些。
message.max.bytes=5242880
# 指定Broker为消息保存的总磁盘容量大小,默认是-1表示不限制
log.retention.bytes=-1
############################# Log Retention Policy #############################
# 数据留存一周
log.retention.hours=168
# 单个segment的大小 1G
log.segment.bytes=1073741824
# 日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.hours)
log.retention.check.interval.ms=300000
# kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
default.replication.factor=3
# 控制消息写入多少个副本后算已提交,默认为1,实际环境建议大于1
min.insync.replicas=2
# 是否启用log压缩,一般不用启用,启用的话可以提高性能
log.cleaner.enable=false
############################# Zookeeper #############################
# zk配置
zookeeper.connect=localhost:12181,localhost:12182,localhost:12183
# zk连接超时时间
zookeeper.connection.timeout.ms=6000
#################################### Topic #####################################
# 是否允许自动创建Topic
auto.create.topics.enable=false
# 是否允许Unclean Leader选举
unclean.leader.election.enable=false
# 是否允许定期进行Leader选举
auto.leader.reblance.enable=false
1.3 单机部署Kafka
- 根据配置项修改配置文件
kafka/config/server.properties
- 启动Kafka
./kafka-server-start.sh -daemon ../config/server.properties
- 验证是否启动成功
[root]# jsp
12368 Kafka
[root]# netstat -nap | grep 9092
tcp6 0 0 :::9092 :::* LISTEN 12368/java
tcp6 0 0 127.0.0.1:48330 127.0.0.1:9092 ESTABLISHED 12368/java
tcp6 0 0 127.0.0.1:9092 127.0.0.1:48330 ESTABLISHED 12368/java
- 创建Topic
.bin/kafka-topics.sh --create --zookeeper localhost:12181,localhost:12182,localhost:12183 --replication-factor 1 --partitions 1 --topic numb
--replication-factor 1 复制1份
--partitions 1 创建1个分区
--topic 创建主题
1.4 伪集群部署Kafka
类似于Zookeeper的伪集群部署,可以在一台机器上使用不同的配置文件,启动多个Kafka进程
1.4.1 集群部署的不同配置项
伪集群部署是只需要修改下面配置项
# 指定broker的id,每个id必须唯一
broker.id = 1
# 指定内网访问ip与端口
listeners=PLAINTEXT://localhost:9092
# 指定当前broker的存储路径
log.dirs=/home/kafka/logs-1
1.4.2 伪集群部署配置
启动n个broker需要准备n个配置文件,这里我们配置3个broker
- server-1.properties
############################# Server Basics #############################
# 全局唯一id
broker.id = 1
############################# Socket Server Settings #############################
# 指定内网访问ip与端口
listeners=PLAINTEXT://localhost:9092
# 网络并发线程数
num.network.threads=3
# IO并发线程数
num.io.threads=8
# Socket发送缓冲区
socket.send.buffer.bytes=102400
# Socket接收缓冲区
socket.receive.buffer.bytes=102400
# 服务器能接收的最大字节数,防止OOM
socket.request.max.bytes=104857600
############################# Log Basics #############################
# 日志数据存储路径
log.dirs=/root/kafka/logs-1
# 默认的partitions数目
num.partitions=3
# 单个日志目录重新加载时线程数,将此值提高有利于提升重启或恢复效率
num.recovery.threads.per.data.dir=1
# 控制Broker能够接收的最大消息大小,应该设置的大一些。
message.max.bytes=5242880
# 指定Broker为消息保存的总磁盘容量大小,默认是-1表示不限制
log.retention.bytes=-1
############################# Log Retention Policy #############################
# 数据留存一周
log.retention.hours=168
# 单个segment的大小 1G
log.segment.bytes=1073741824
# 日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.hours)
log.retention.check.interval.ms=300000
# kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
default.replication.factor=3
# 控制消息写入多少个副本后算已提交,默认为1,实际环境建议大于1
min.insync.replicas=2
# 是否启用log压缩,一般不用启用,启用的话可以提高性能
log.cleaner.enable=false
############################# Zookeeper #############################
# zk配置
zookeeper.connect=localhost:12181,localhost:12182,localhost:12183
# zk连接超时时间
zookeeper.connection.timeout.ms=6000
#################################### Topic #####################################
# 是否允许自动创建Topic
auto.create.topics.enable=false
# 是否允许Unclean Leader选举
unclean.leader.election.enable=false
# 是否允许定期进行Leader选举
auto.leader.reblance.enable=false
- server-2.properties
############################# Server Basics #############################
# 全局唯一id
broker.id = 2
############################# Socket Server Settings #############################
# 指定内网访问ip与端口
listeners=PLAINTEXT://localhost:9093
# 网络并发线程数
num.network.threads=3
# IO并发线程数
num.io.threads=8
# Socket发送缓冲区
socket.send.buffer.bytes=102400
# Socket接收缓冲区
socket.receive.buffer.bytes=102400
# 服务器能接收的最大字节数,防止OOM
socket.request.max.bytes=104857600
############################# Log Basics #############################
# 日志数据存储路径
log.dirs=/root/kafka/logs-2
# 默认的partitions数目
num.partitions=3
# 单个日志目录重新加载时线程数,将此值提高有利于提升重启或恢复效率
num.recovery.threads.per.data.dir=1
# 控制Broker能够接收的最大消息大小,应该设置的大一些。
message.max.bytes=5242880
# 指定Broker为消息保存的总磁盘容量大小,默认是-1表示不限制
log.retention.bytes=-1
############################# Log Retention Policy #############################
# 数据留存一周
log.retention.hours=168
# 单个segment的大小 1G
log.segment.bytes=1073741824
# 日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.hours)
log.retention.check.interval.ms=300000
# kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
default.replication.factor=3
# 控制消息写入多少个副本后算已提交,默认为1,实际环境建议大于1
min.insync.replicas=2
# 是否启用log压缩,一般不用启用,启用的话可以提高性能
log.cleaner.enable=false
############################# Zookeeper #############################
# zk配置
zookeeper.connect=localhost:12181,localhost:12182,localhost:12183
# zk连接超时时间
zookeeper.connection.timeout.ms=6000
#################################### Topic #####################################
# 是否允许自动创建Topic
auto.create.topics.enable=false
# 是否允许Unclean Leader选举
unclean.leader.election.enable=false
# 是否允许定期进行Leader选举
auto.leader.reblance.enable=false
- server-3.properties
############################# Server Basics #############################
# 全局唯一id
broker.id = 3
############################# Socket Server Settings #############################
# 指定内网访问ip与端口
listeners=PLAINTEXT://localhost:9094
# 网络并发线程数
num.network.threads=3
# IO并发线程数
num.io.threads=8
# Socket发送缓冲区
socket.send.buffer.bytes=102400
# Socket接收缓冲区
socket.receive.buffer.bytes=102400
# 服务器能接收的最大字节数,防止OOM
socket.request.max.bytes=104857600
############################# Log Basics #############################
# 日志数据存储路径
log.dirs=/root/kafka/logs-3
# 默认的partitions数目
num.partitions=3
# 单个日志目录重新加载时线程数,将此值提高有利于提升重启或恢复效率
num.recovery.threads.per.data.dir=1
# 控制Broker能够接收的最大消息大小,应该设置的大一些。
message.max.bytes=5242880
# 指定Broker为消息保存的总磁盘容量大小,默认是-1表示不限制
log.retention.bytes=-1
############################# Log Retention Policy #############################
# 数据留存一周
log.retention.hours=168
# 单个segment的大小 1G
log.segment.bytes=1073741824
# 日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.hours)
log.retention.check.interval.ms=300000
# kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
default.replication.factor=3
# 控制消息写入多少个副本后算已提交,默认为1,实际环境建议大于1
min.insync.replicas=2
# 是否启用log压缩,一般不用启用,启用的话可以提高性能
log.cleaner.enable=false
############################# Zookeeper #############################
# zk配置
zookeeper.connect=localhost:12181,localhost:12182,localhost:12183
# zk连接超时时间
zookeeper.connection.timeout.ms=6000
#################################### Topic #####################################
# 是否允许自动创建Topic
auto.create.topics.enable=false
# 是否允许Unclean Leader选举
unclean.leader.election.enable=false
# 是否允许定期进行Leader选举
auto.leader.reblance.enable=false
1.4.3 伪集群启动
集群启动前要先启动zookeeper
./bin/kafka-server-start.sh -daemon ../config/server-1.properties
./bin/kafka-server-start.sh -daemon ../config/server-2.properties
./bin/kafka-server-start.sh -daemon ../config/server-3.properties
1.4.4 查看集群状态
jps
查看是否有zk与kafka进程信息
[root@local kafka]# jps
3889 QuorumPeerMain
6049 Kafka
4246 Kafka
3819 QuorumPeerMain
3854 QuorumPeerMain
5674 Kafka
- zookeeper节点查看
broker
配置信息
[zk: localhost:2181(CONNECTED) 8] ls /
[admin, brokers, cluster, config, consumers, controller....]
[zk: localhost:2181(CONNECTED) 8] ls /brokers/ids
[1, 2, 3]
1.5 Kafka常用命令
1.5.1 broker启动
./bin/kafka-server-start.sh [-daemon] ../config/server.properties [--override property=value]*
1.5.2 broker停止
./bin/kafka-server-stop.sh
1.5.3 topic管理
创建topic
./bin/kafka-topics.sh --zookeeper localhost:2181 --create --partitions [分区数] --replication-factor [副本数] --tpoic tpoic名称 --config [key=value]
- 创建一个名字为
numb
,3分区
,每个分区3副本
,提交2个以上副本
算成功提交的topic
./bin/kafka-topics.sh --zookeeper localhost:2181 --create --partitions 3 --replication-factor 3 --tpoic tpoic名称 --config min.insync.replicas=2
查看所有topic
./bin/kafka-topics.sh --zookeeper localhost:2181 --list
查看指定topic信息
/bin/kafka-topics.sh --zookeeper localhost:2181 --topic [topic名称] --describe
返回
Topic:numb PartitionCount:3 ReplicationFactor:3 Configs:min.insync.replicas=2
Topic: numb Partition: 0 Leader: none Replicas: 1,2,3 Isr:
Topic: numb Partition: 1 Leader: none Replicas: 2,3,1 Isr:
Topic: numb Partition: 2 Leader: none Replicas: 3,1,2 Isr:
-
Topic
:topic的名称 -
PartitionCount
:Partition的个数 -
ReplicationFactor
:topic的副本数 -
Configs
:topic级的配置项
Topic: numb Partition: 1 Leader: 2 Replicas: 2 Isr: 2
:
-
Leader
:代表的是Partition为1的Leader在id=2的Broker上 -
Replicas
:显示给定partiton所有副本所存储节点的节点列表,不管该节点是否是leader或者是否存活 -
Isr
:副本都已同步的的节点集合,这个集合中的所有节点都是存活状态,并且跟leader同步 Isr是Replicas的子集。
修改topic的配置
- 修改topic的partitions数目
/bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic [topic名称] --partitions [新分区数]
删除topic
/bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic [topic名称]
1.5.4 producer生产数据
使用生产者脚本kafka-console-producer.sh
生产数据
./bin/kafka-console-producer.sh --broker-list loalhost:9092,localhost:9093,localhost:9094 --topic [topic名称]
之后console进入kafka生产者模式,每次回车发送一次数据
>>123
>>456
>>789
>>发送完成
1.5.5 consumer消费数据
使用消费者脚本kafka-console-consume.sh
消费/查看数据
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --topic [topic名称] --partition [分区id] --from-beginning
1.5.6 使用Kafka-Tool观察数据