上传解压步骤省略
进入到kafka解压目录下的Config文件夹
修改配置文件:server.properties
vim server.properties
要点:
- broker.id=0 // 此设置在master主机不必更改,但此值是唯一值,slave1和slave2中要该为1和2
其次该值可以改为1 对应的slave1和slave2为2、3,亦可以是2、3、4,只要不一样就可以delete.topic.enable=true
该配置在2.X版本可能没有在Server.properties配置文件中没有写出,此配置为可以删除tipic,在1.X版本中为注释不生效状态,2.X版本中没有该项设置,可以添加。listeners=PLAINTEXT://:9092
该配置为注释不生效状态,2.X版本请打开该选项,否则无法与其他两台从机中的kafka
连接,该端口为监听端口。log.dirs=/usr/apps/tmp/kafka/logs
该设置是已修改后的路径,默认应该在/tmp/kafka-logs
文件夹中,该配置设置Kafka暂存文件或信息的位置,并不是log日志文件,因为Kafka生成的文件后缀名就是.log
格式。zookeeper.connect=master:2181,slave1:2181,slave2:2181
后面的:2181
可以写,也可以不写,因为已经在/etc/hosts
文件中配置了,Kafka会自主绑定端口
该文件夹下的zookeeper.properties
中的dataDir=路径
可以更改也可以不更改。
因为Kafka是以zookeeper为基础,所以要先启动zookeeper:
/usr/apps/kafka_2.11-2.0.0/bin/zookeeper-server-start.sh -deamon /usr/apps/kafka_2.11-2.0.0/config/zookeeper.properties
本文章中用到的为Kafka自带的zookeeper
说明:
- zookeeper启动文件:
zookeeper-server-start.sh
-daemon
:守护进程模式,也就是后台启动,如果不后台启动,则会是一个阻塞线程,即打开后就停在那里,不能关闭窗口,若关闭窗口则关闭进程【服务】zookeeper.properties
配置文件
合并解释:启动zookeeper进程,后台启动,使用该配置启动
启动Kafka:
/usr/apps/kafka_2.11-2.0.0/bin/kafka-server-start.sh -daemon /usr/apps/kafka_2.11-2.0.0/config/server.properties
具体说明请以上方的说明为例
2021年11月8日更新
Kafka配置安装【内置zookeeper】
- Kafka机制
• Kafka将消息以topic为单位进行归纳。
• 将向Kafka topic发布消息的程序成为producers.
• 将预订topics并消费消息的程序成为consumer.
• Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker.
producers通过网络将消息发送到Kafka集群,集群向消费者提供消息,如下图所示
环境准备
- Kafka版本:
kafka_2.11-2.0.0.tgz
- 三台主机:master、slave1、slave2【已在
/etc/profile
中作IP映射】
安裝配置工作
- Kafka解压安装
[root@master ~]# tar -zxf /usr/tar/kafka_2.11-2.0.0.tgz -C /usr/apps/
- 新建kafka的日志目录和zookeeper数据目录
这两项默认放在tmp目录,而tmp目录中内容会随重启而丢失,所以需要自定义目录
# 递归创建
[root@master ~]# mdkir -p /usr/apps/kafka_2.11-2.0.0/zkdata
[root@master ~]# mdkir -p /usr/apps/kafka_2.11-2.0.0/kfkdata
[root@master ~]# mdkir -p /usr/apps/kafka_2.11-2.0.0/log/zklog
[root@master ~]# mdkir -p /usr/apps/kafka_2.11-2.0.0/log/kafka
配置zookeeper
在master中进行操作,配置完毕分发给两台机器
- 进到
Kafka
的config
目录
[root@master kafka_2.11-2.0.0]# cd config/
- 编辑
zookeeper.properties
文件
vim zookeeper.properties
- 内容如下
dataDir=/usr/apps/kafka_2.11-2.0.0/zkdata
dataLogDir=/usr/apps/kafka_2.11-2.0.0/log/zklog
# the port at which the clients will connect
# 端口号
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
# 最大连接数
# maxClientCnxns=0
# zookeeper的基本单元时间,毫秒
tickTime=2000
# Leader-Follower初始通信时限 tickTime*10
initLimit=10
# Leader-Follower同步通信时限 tickTime*5
syncLimit=5
# 设置broker ID的服务地址
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
- zookeeper数据目录添加
myid
配置
进入到目录:/usr/apps/kafka_2.11-2.0.0/zkdata
cd /usr/apps/kafka_2.11-2.0.0/zkdata
# 创建并写入myid值
echo 1 > myid
# master的myid的值为1,slave1的myid的值为2,slave2的myid的值为3
# 要和上方的server.1的1保持对应
Kafka配置
- 进入到
config
目录【命令省略】 - 编辑配置文件
server.properties
[root@master config]# vim server.properties
三台服务器都要配置,其中的
broker.id
、listeners
不一样,其他配置都一样
############################# Server Basics #############################
# The id of the broker. This must be set to a unique integer for each broker.
# # broker 的全局唯一编号,不能重复
broker.id=0
############################# Socket Server Settings #############################
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
# 配置监听,修改为本机ip
listeners=PLAINTEXT://master:9092
# broker的主机地址,若是设置了,那么会绑定到这个地址上,若是没有,会绑定到所有的接口上,并将其中之一发送到ZK,一般不设置
host.name=本机IP
# 处理网络请求的线程数量,默认
num.network.threads=3
# 用来处理磁盘IO的线程数量,默认,理论上说应该大于你的磁盘数,此处保持默认
num.io.threads=8
# 发送套接字的缓冲区大小,默认
socket.send.buffer.bytes=102400
# 接收套接字的缓冲区大小,默认
socket.receive.buffer.bytes=102400
# 请求套接字的缓冲区大小,默认
socket.request.max.bytes=104857600
############################# Log Basics #############################
# A comma separated list of directories under which to store log files
# Kafka 运行日志【分区文件】存放路径
log.dirs=/usr/apps/kafka_2.11-2.0.0/kfkdata
# topic 在当前broker上的分片个数,与broker保持一致
num.partitions=3
# 用来恢复和清理data下数据的线程数量,默认
num.recovery.threads.per.data.dir=1
############################# Internal Topic Settings #############################
# 主题副本数,在非测试环境中,尽量大于1,保证可用性
offsets.topic.replication.factor=3
# 事务主题的复制因子(设置更高以确保可用性)。 内部主题创建将失败,直到群集大小满足此复制因素要求
transaction.state.log.replication.factor=3
# 覆盖事务主题的min.insync.replicas(副本写入保证)配置,在min.insync.replicas中,replicas数量为1,该参数将默认replicas定义为2
transaction.state.log.min.isr=2
############################# Log Retention Policy #############################
# segment文件保留的最长时间,超时将被删除,默认
log.retention.hours=168
############################# Zookeeper #############################
# 配置三台服务zookeeper连接地址
zookeeper.connect=master:2181,slave1:2181,slave2:2181
# Timeout in ms for connecting to zookeeper
# 连接到ZK server的超时时间,没有配置就使用 zookeeper.session.timeout.ms
zookeeper.connection.timeout.ms=6000
- 分发给其他两台从机【
scp -r
命令,此处省略】 - 修改zookeeper的
myid
文件 - 修改Kafka的
broker.id
- 修改Kafka的监听地址
listeners=PLAINTEXT://本机IP或IP映射名称:9092
启动
kafka启动时先启动zookeeper,再启动kafka;关闭时相反,先关闭kafka,再关闭zookeeper
- 进入到Kafka的
bin
目录 - 启动
zookeeper
因为
zookeeper
和Kafka
启动时为阻塞进程,所以本篇文章使用后台守护进程-daemon
启动
[root@master bin]# ./zookeeper-server-start.sh ../config/zookeeper.properties
# 后台启动命令
[root@master bin]# ./zookeeper-server-start.sh -daemon ../config/zookeeper.properties
第一台zookeeper启动后,会一直报错,不用管,这是因为第二三台的机器没有启动,zookeeper连接不到,启动三台zookeeper后就正常了
当三台zookeeper没有完全启动时,报错【拒绝连接】为正常
- 启动Kafka
[root@master bin]# ./kafka-server-start.sh ../config/server.properties
# 后台启动命令
[root@master bin]# ./kafka-server-start.sh -daemon ../config/server.properties
- Kafka常见错误
- Kafka启动后几秒后自动关闭
原因:
- 查看
broker.id
是否冲突 - 查看监听地址是否为本机地址【例如本机为slave1,则监听地址为
listeners=PLAINTEXT://slave1:9092
】 - 查看
zookeeper
是否启动,即QuorumPeerMain
进程 - 查看防火墙是否关闭:
systemctl status firewalld