1 下载
传送门:http://kafka.apache.org/downloads
下载binary版,不用编译。
2 配置
2.1 新建kafka文件夹
mkdir kafka
路径:/home/xdq/xinPrj/kafka
2.2 解压文件
tar -zxvf kafka_2.12-2.2.1.tgz -C .
- 文件目录
|--kafka
├── kafka_2.12-2.2.1
│ ├── bin
│ ├── config
│ ├── libs
│ ├── LICENSE
│ ├── NOTICE
│ └── site-docs
2.3 修改配置文件
在文件夹config中的配置文件
序号 | 文件 | 描述 |
---|---|---|
1 | server.properties | kafka配置文件,用于向zookeeper注册broker |
2 | zookeeper.properties | zookeeper配置文件,用于承载kafka及producer,consumer的注册 |
3 | producer.properties | 生产者配置,连接zookeeper和kafka及向zookeeper注册 |
4 | consumer.properties | 消费者配置,连接zookeeper和kafka及向zookeeper注册 |
cd kafka/kafka_2.12-2.2.1/config
3 单机部署
3.1 server.properties
# broker(物理机) id编号,每台物理机指定唯一id,不可重复
broker.id=1
# 监听端口
port=9092
# 监听内网(局域网),PLAINTEXT传输协议(无需认证)
listeners=PLAINTEXT://:9092
# 网络线程
num.network.threads=3
# 处理请求IO线程
num.io.threads=8
# 套接字发送缓存
socket.send.buffer.bytes=102400
# 套接字接收缓存
socket.receive.buffer.bytes=102400
# 套接字最大请求字节
socket.request.max.bytes=104857600
# kafka日志路径
log.dirs=/home/xdq/xinPrj/kafka/kafka_2.12-2.2.1/kafka-logs
# boker的分区数
num.partitions=1
# RAID磁盘阵列:恢复盘数
num.recovery.threads.per.data.dir=1
# 副本数量
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# 日志更新(缓存时间):单位:hour
log.retention.hours=168
# 分片字节量
log.segment.bytes=1073741824
# 检查日志时间
log.retention.check.interval.ms=300000
# 连接zookeeper,向zookeeper注册broker
zookeeper.connect=localhost:2181
# zookeeper连接周期
zookeeper.connection.timeout.ms=6000
# group均衡时间
group.initial.rebalance.delay.ms=0
3.2 zookeeper.properties
# zookeeper数据目录
dataDir=/home/xdq/xinPrj/zookeeper/datas
# zookeeper监听端口,用户端及broker,producer,consumer
clientPort=2181
# 主机host
host.name=localhost
# 客户端连接量
maxClientCnxns=0
3.3 producer.properties
# 连接broker服务IP:port
bootstrap.servers=localhost:9092
# 数据类型: none, gzip, snappy, lz4, zstd
compression.type=none
# 连接zookeeper
zookeeper.connect=localhost:2181
3.4 consumer.properties
# 连接broker服务IP:port
bootstrap.servers=localhost:9092
# 消费者用户组id
group.id=test-consumer-group
# 连接zookeeper
zookeeper.connect=localhost:2181
3.5 Usage
3.5.1 启动zookeeper
- 从zookeeper启动并后台运行
bin/zkServer.sh start
- 从kafka内启动前台运行
bin/zookeeper-server-start.sh config/zookeeper.properties
3.5.2 启动kafka
bin/kafka-server-start.sh config/server.properties
- 查看此时的进程:jsp
jps
- Result
24163 QuorumPeerMain
25235 Jps
24847 Kafka
3.5.3 创建topic
topic向zookeeper注册.
- 创建
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test1
- Result
Created topic test1.
3.5.4 查看topic
- 查看
bin/kafka-topics.sh --list --zookeeper localhost:2181
- Result
test1
3.5.5 启动生产者producer
- 启动
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test1
- Result
启动了生产者服务.
>hello world!
3.5.6 启动消费者cousumer
- 低版本启动
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test1 --from-begining
- 高版本启动
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1 --from-beginning
- 开启了接收消息的服务
hello world!
3.5.7 查看此时进程
- cmd
jps
- Result
24163 QuorumPeerMain
27943 ConsoleConsumer
28346 Jps
26542 ConsoleProducer
24847 Kafka
3.5.8 查看broker
bin/zookeeper-shell.sh localhost:2181,localhost:2182,localhost:2183
ls /brokers/ids
[1, 2, 3]
4 伪分布式部署
4.1 配置config文件
- server1.properties
# broker(物理机) id编号,每台物理机指定唯一id,不可重复
broker.id=1
# 监听端口
port=9092
# 监听内网(局域网),PLAINTEXT传输协议(无需认证)
listeners=PLAINTEXT://:9092
# 网络线程
num.network.threads=3
# 处理请求IO线程
num.io.threads=8
# 套接字发送缓存
socket.send.buffer.bytes=102400
# 套接字接收缓存
socket.receive.buffer.bytes=102400
# 套接字最大请求字节
socket.request.max.bytes=104857600
# kafka日志路径
log.dirs=/home/xdq/xinPrj/kafka/kafka_2.12-2.2.1/kafka-logs
# boker的分区数
num.partitions=1
# RAID磁盘阵列:恢复盘数
num.recovery.threads.per.data.dir=1
# 副本数量
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# 日志更新(缓存时间):单位:hour
log.retention.hours=168
# 分片字节量
log.segment.bytes=1073741824
# 检查日志时间
log.retention.check.interval.ms=300000
# 连接zookeeper,向zookeeper注册broker,kafka为主机内网host,218x为zookeeper端口
zookeeper.connect=kafak:2181,kafka:2182,kafka:2183
# zookeeper连接周期
zookeeper.connection.timeout.ms=6000
# group均衡时间
group.initial.rebalance.delay.ms=0
- server2.properties
# broker(物理机) id编号,每台物理机指定唯一id,不可重复
broker.id=2
# 监听端口
port=9093
# 监听内网(局域网),PLAINTEXT传输协议(无需认证)
listeners=PLAINTEXT://:9093
# 网络线程
num.network.threads=3
# 处理请求IO线程
num.io.threads=8
# 套接字发送缓存
socket.send.buffer.bytes=102400
# 套接字接收缓存
socket.receive.buffer.bytes=102400
# 套接字最大请求字节
socket.request.max.bytes=104857600
# kafka日志路径
log.dirs=/home/xdq/xinPrj/kafka/kafka_2.12-2.2.1/kafka-logs
# boker的分区数
num.partitions=1
# RAID磁盘阵列:恢复盘数
num.recovery.threads.per.data.dir=1
# 副本数量
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# 日志更新(缓存时间):单位:hour
log.retention.hours=168
# 分片字节量
log.segment.bytes=1073741824
# 检查日志时间
log.retention.check.interval.ms=300000
# 连接zookeeper,向zookeeper注册broker,kafka为主机内网host,218x为zookeeper端口
zookeeper.connect=kafak:2181,kafka:2182,kafka:2183
# zookeeper连接周期
zookeeper.connection.timeout.ms=6000
# group均衡时间
group.initial.rebalance.delay.ms=0
- server3.properties
# broker(物理机) id编号,每台物理机指定唯一id,不可重复
broker.id=3
# 监听端口
port=9094
# 监听内网(局域网),PLAINTEXT传输协议(无需认证)
listeners=PLAINTEXT://:9094
# 网络线程
num.network.threads=3
# 处理请求IO线程
num.io.threads=8
# 套接字发送缓存
socket.send.buffer.bytes=102400
# 套接字接收缓存
socket.receive.buffer.bytes=102400
# 套接字最大请求字节
socket.request.max.bytes=104857600
# kafka日志路径
log.dirs=/home/xdq/xinPrj/kafka/kafka_2.12-2.2.1/kafka-logs
# boker的分区数
num.partitions=1
# RAID磁盘阵列:恢复盘数
num.recovery.threads.per.data.dir=1
# 副本数量
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# 日志更新(缓存时间):单位:hour
log.retention.hours=168
# 分片字节量
log.segment.bytes=1073741824
# 检查日志时间
log.retention.check.interval.ms=300000
# 连接zookeeper,向zookeeper注册broker,kafka为主机内网host,218x为zookeeper端口
zookeeper.connect=kafak:2181,kafka:2182,kafka:2183
# zookeeper连接周期
zookeeper.connection.timeout.ms=6000
# group均衡时间
group.initial.rebalance.delay.ms=0
4.2 zookeeper使用独立的部署
参考博客:Ubuntu部署zookeeper的伪分布式zookeeper部署.
4.3 外网kafka通信
注释listeners=PLAINTEXT,修改如下:
advertised.listeners=PLAINTEXT://外网IP:9092
5 真集群部署
5.1 服务器集群
3台服务器为例,其中IP为任意选取的同外网段IP,配置时,在相应文件配置相应IP即可。
- IP地址及端口
序号 | 外网IP | 内网IP | 内网映射 | 端口1 | 端口2 | 端口3 | 端口4 |
---|---|---|---|---|---|---|---|
1 | 10.10.10.10 | 192.168.0.1 | kafka1 | 2181 | 2888 | 3888 | 9092 |
2 | 10.10.12.12 | 192.168.0.2 | kafka2 | 2181 | 2888 | 3888 | 9092 |
3 | 10.10.14.14 | 192.168.0.3 | kafka3 | 2181 | 2888 | 3888 | 9092 |
- 仅内网从kafka交换数据
配置文件 | IP选择 | 端口 |
---|---|---|
zookeeper | 内网IP | 2181 |
kafka:zookeeper.connect | 内网IP | 9092 |
kafka:advertised.listerns | 内网IP | 9092 |
- 内网及外网交换数据
配置文件 | IP选择 | 端口 |
---|---|---|
zookeeper | 内网IP | 2181 |
kafka:zookeeper.connect | 内网IP | 9092 |
kafka:advertised.listerns | 外网IP | 9092 |
5.2 配置config文件
5.2.1 第一台服务器
- server.properties
# broker(物理机) id编号,每台物理机指定唯一id,不可重复
broker.id=1
# 监听端口
port=9092
# 监听外网(局域网),PLAINTEXT传输协议(无需认证)
advertised.listeners=PLAINTEXT://10.10.10.10:9092
# 网络线程
num.network.threads=3
# 处理请求IO线程
num.io.threads=8
# 套接字发送缓存
socket.send.buffer.bytes=102400
# 套接字接收缓存
socket.receive.buffer.bytes=102400
# 套接字最大请求字节
socket.request.max.bytes=104857600
# kafka日志路径
log.dirs=/home/xdq/xinPrj/kafka/kafka_2.12-2.2.1/kafka-logs
# boker的分区数
num.partitions=1
# RAID磁盘阵列:恢复盘数
num.recovery.threads.per.data.dir=1
# 副本数量
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# 日志更新(缓存时间):单位:hour
log.retention.hours=168
# 分片字节量
log.segment.bytes=1073741824
# 检查日志时间
log.retention.check.interval.ms=300000
# 连接zookeeper,向zookeeper注册broker,kafka为主机内网host,2181为zookeeper端口
zookeeper.connect=kafak1:2181,kafka2:2181,kafka3:2181
# zookeeper连接周期
zookeeper.connection.timeout.ms=6000
# group均衡时间
group.initial.rebalance.delay.ms=0
5.2.2 第二台服务器
- server.properties
# broker(物理机) id编号,每台物理机指定唯一id,不可重复
broker.id=2
# 监听端口
port=9092
# 监听外网(局域网),PLAINTEXT传输协议(无需认证)
advertised.listeners=PLAINTEXT://10.10.12.12:9092
# 网络线程
num.network.threads=3
# 处理请求IO线程
num.io.threads=8
# 套接字发送缓存
socket.send.buffer.bytes=102400
# 套接字接收缓存
socket.receive.buffer.bytes=102400
# 套接字最大请求字节
socket.request.max.bytes=104857600
# kafka日志路径
log.dirs=/home/xdq/xinPrj/kafka/kafka_2.12-2.2.1/kafka-logs
# boker的分区数
num.partitions=1
# RAID磁盘阵列:恢复盘数
num.recovery.threads.per.data.dir=1
# 副本数量
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# 日志更新(缓存时间):单位:hour
log.retention.hours=168
# 分片字节量
log.segment.bytes=1073741824
# 检查日志时间
log.retention.check.interval.ms=300000
# 连接zookeeper,向zookeeper注册broker,kafka为主机内网host,2181为zookeeper端口
zookeeper.connect=kafak1:2181,kafka2:2181,kafka3:2181
# zookeeper连接周期
zookeeper.connection.timeout.ms=6000
# group均衡时间
group.initial.rebalance.delay.ms=0
5.2.3 第三台服务器
- server.properties
# broker(物理机) id编号,每台物理机指定唯一id,不可重复
broker.id=3
# 监听端口
port=9092
# 监听外网(局域网),PLAINTEXT传输协议(无需认证)
advertised.listeners=PLAINTEXT://10.10.14.14:9092
# 网络线程
num.network.threads=3
# 处理请求IO线程
num.io.threads=8
# 套接字发送缓存
socket.send.buffer.bytes=102400
# 套接字接收缓存
socket.receive.buffer.bytes=102400
# 套接字最大请求字节
socket.request.max.bytes=104857600
# kafka日志路径
log.dirs=/home/xdq/xinPrj/kafka/kafka_2.12-2.2.1/kafka-logs
# boker的分区数
num.partitions=1
# RAID磁盘阵列:恢复盘数
num.recovery.threads.per.data.dir=1
# 副本数量
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# 日志更新(缓存时间):单位:hour
log.retention.hours=168
# 分片字节量
log.segment.bytes=1073741824
# 检查日志时间
log.retention.check.interval.ms=300000
# 连接zookeeper,向zookeeper注册broker,kafka为主机内网host,2181为zookeeper端口
zookeeper.connect=kafak1:2181,kafka2:2181,kafka3:2181
# zookeeper连接周期
zookeeper.connection.timeout.ms=6000
# group均衡时间
group.initial.rebalance.delay.ms=0
5.3 zookeeper使用独立的部署
参考博客:Ubuntu部署zookeeper的真分布式(集群)zookeeper部署.
5.4 Usage
- 启动kafka
bin/kafka-server-start.sh --broker-list 10.10.10.10:9092,10.10.12.12:9092,10.10.14.14:9092 config/server.properties
- 新建topic
bin/kafka-topics.sh --create --zookeeper 10.10.10.10:2181,10.10.12.12:2181 --replication-factor 1 --partition 1 --topic topic-test
- 查看topic
bin/kafka-topics.sh --list --zookeeper 10.10.10.10:2181,10.10.12.12:2181,10.10.14.14:2181
- 启动生产者
bin/kafka-console-producer.sh --broker-list 10.10.10.10:9092,10.10.12.12:9092,10.10.14.14:9092 --topic topic-test
- 启动消费者
bin/kafka-console-consumer.sh --bootstrap-server 10.10.10.10:9092,10.10.12.12:9092,10.10.14.14:9092 --topic topic-test --from-beginning
5.5 外网kafka通信
注释listeners=PLAINTEXT,修改如下:
advertised.listeners=PLAINTEXT://外网IP:9092
6 小结
(1) kafka启动流程:zookeeper
↦
\mapsto
↦kafka-server
↦
\mapsto
↦create-topic
↦
\mapsto
↦producer
↦
\mapsto
↦consumer
(2) zookeeper启动,使用内网IP和2181端口;
(3) kafka启动分情况:
序号 | 使用情况 | 启动IP |
---|---|---|
1 | 仅内网使用 | 内网IP启动 |
2 | 内网+外网 | 外网IP启动 |
(4)监听服务说明
序号 | 使用情况 | 监听服务 |
---|---|---|
1 | 仅内网使用 | listeners |
2 | 内网+外网 | advetised.listeners |
advertised.listeners是用于监听外网IP的服务,即若需要远程连接Kafka,需要将该参数配置为外网IP。
(5) 监听权限:
序号 | 权限 | 描述 |
---|---|---|
1 | PLAINTEXT | 明文,无认证 |
2 | SASL/GSSAPI | Kerberos认证,0.9.0.0版本开始 |
3 | SASL/PLAIN | 0.10.0.0开始使用 |
4 | SASL/SCRAM-SHA-256和SASL/SCRAM-SHA-512 | 0.10.2.0开始使用 |
5 | SASL/OAUTHBEARER | 2.0版本开始使用 |
【参考文献】
[1]http://kafka.apache.org/downloads
[2]https://blog.csdn.net/sinat_30026065/article/details/82148587
[3]https://blog.csdn.net/hg_harvey/article/details/79174104
[4]https://blog.csdn.net/csdn_sunlighting/article/details/81516646