@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

  1. 根据配置项修改配置文件kafka/config/server.properties
  2. 启动Kafka
./kafka-server-start.sh -daemon ../config/server.properties
  1. 验证是否启动成功
[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
  1. 创建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]
  • 创建一个名字为numb3分区,每个分区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观察数据