本文目录如下:
第1章 Kafka 基本概念
1.1 Kafka 简介
Kafka
是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于
大数据实时处理领域。
1.1.1 消息队列模式—发布/订阅模式
- 一对多,消费者消费数据之后不会清除消息。
- 消息生产者(发布)将消息发布到
topic
中,同时有多个消息消费者(订阅)消费该消
息。和点对点方式不同,发布到topic
的消息会被所有订阅者消费。
1.2 Kafka 基础架构
- (1)
Producer
:消息生产者,就是向kafka broker
发消息的客户端; - (2)
Consumer
:消息消费者,向kafka broker
取消息的客户端; - (3)
Consumer Group (CG)
:消费者组,由多个consumer
组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。 - (4)
Broker
:一台kafka
服务器就是一个broker
。一个集群由多个broker
组成。一个broker
可以容纳多个topic
。 - (5)
Topic
:可以理解为一个队列,生产者和消费者面向的都是一个topic
; - (6)
Partition
:为了实现扩展性,一个非常大的topic
可以分布到多个broker
(即服务器)上,一个topic
可以分为多个partition
,每个partition
是一个有序的队列; - (7)
Replica
:副本,为保证集群中的某个节点发生故障时,该节点上的partition
数据不丢失,且kafka
仍然能够继续工作,kafka
提供了副本机制,一个topic
的每个分区都有若干个副本,一个leader
和若干个follower
。 - (8)
leader
:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader
。 - (9)
follower
:每个分区多个副本中的“从”,实时从leader
中同步数据,保持和leader
数据的同步。leader
发生故障时,某个follower
会成为新的follower
。
第2章 Kafka 安装、使用、集成环境
2.1 虚拟机环境准备
-
(1) 虚拟机准备
虚拟机的创建于配置在之前博客详细说过,需要的同学可以参考: Hadoop运行环境搭建中第1.1小节
进行操作。 -
(2) 安装 JDK
安装JDK
在之前的博客中已经详细说过,没安装的同学可以参考: Hadoop运行环境搭建中第1.2小节
进行操作。 -
(3) 安装 Zookeeper
安装Zookeeper
在之前的博客中已经详细说过,没安装的同学可以参考: Zookeeper基础—本地模式安装中第2.1小节
进行操作。
2.2 Linux环境下安装Kafka环境
2.2.1 集群规划
hadoop100 | hadoop101 | hadoop102 |
---|---|---|
zookeeper | zookeeper | zookeeper |
kafka | kafka | kafka |
2.2.2 安装Kafka
- (1) 进入到
Kafka
安装包路径下
[xqzhao@hadoop100 ~]$ cd /opt/software/
注: Kafka
安装包下载地址: 点击进入Kafka下载地址
- (2) 解压安装文件到
/opt/module
下面
[xqzhao@hadoop100 software]$ tar -zvxf kafka_2.11-2.4.0.tgz -C /opt/module/
- (3) 查看是否解压成功
[xqzhao@hadoop100 software]$ ls /opt/module/
kafka_2.11-2.4.0
// 修改 `kafka_2.11-2.4.0` 的名称为 `kafka`
[xqzhao@hadoop100 module]$ mv kafka_2.11-2.4.0/ kafka
- (4) 在
/opt/module/kafka
目录下创建logs
文件夹
[xqzhao@hadoop100 kafka]$ mkdir logs
- (5) 修改配置文件
[xqzhao@hadoop100 kafka]$ cd config/
[xqzhao@hadoop100 config]$ vim server.properties
输入以下内容:
#broker 的全局唯一编号,不能重复
broker.id=0
#删除 topic 功能使能
delete.topic.enable=true
#处理网络请求的线程数量
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=/opt/module/kafka/logs
#topic 在当前 broker 上的分区个数
num.partitions=1
#用来恢复和清理 data 下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment 文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接 Zookeeper 集群地址
zookeeper.connect=hadoop100:2181,hadoop101:2181,hadoop102:2181
- (6) 配置环境变量
[xqzhao@hadoop100 module]$ sudo vim /etc/profile
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin
[xqzhao@hadoop100 module]$ source /etc/profile
- (7) 向集群中的其他主机分发安装包
[xqzhao@hadoop100 module]$ xsync kafka/
- 注1:
分发之后记得配置其他机器的 环境变量
- 注2:
xsync
集群分发脚本在: Hadoop运行模式-完全分布式(重点) 中第4.4小节
有详细描述。
- (8) 分别在
hadoop101
和hadoop102
上修改配置文件/opt/module/kafka/config/server.properties
中的broker.id=1
、broker.id=2
注:broker.id
不得重复
[xqzhao@hadoop100 kafka]$ cd config/
[xqzhao@hadoop100 config]$ vim server.properties
2.2.3 操作 Kafka 集群
2.2.3.1 前置条件: 启动Zookeeper集群
使用脚本操作 Zookeeper
集群:
# 启动集群 Zookeeper 服务
[xqzhao@hadoop100 bin]$ zk.sh start
注1: **
Zookeeper
集群安装配置等请参考博客: Zookeeper集群操作—集群安装、操作脚本 中第3.1小节
的描述。
注2:Zookeeper
集群启动停止脚本请查看博客: Zookeeper集群操作—集群安装、操作脚本 中第3.3.1小节
的描述。
2.2.3.2 启动集群
依次在 hadoop100
、hadoop101
、hadoop102
节点上启动 kafka
[xqzhao@hadoop100 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties
[xqzhao@hadoop101 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties
[xqzhao@hadoop102 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties
2.2.3.3 关闭集群
[xqzhao@hadoop100 kafka]$ bin/kafka-server-stop.sh stop
[xqzhao@hadoop101 kafka]$ bin/kafka-server-stop.sh stop
[xqzhao@hadoop102 kafka]$ bin/kafka-server-stop.sh stop
2.2.3.4 编写 kafka 群起脚本
- (1) 在
hadoop100
的/home/xqzhao/bin
目录下创建kk.sh
文件
[xqzhao@hadoop100 bin]$ sudo touch kk.sh
[xqzhao@hadoop100 bin]$ sudo vim kk.sh
在该文件中编写如下代码:
#!/bin/bash
case $1 in
"stop"){
for i in hadoop100 hadoop101 hadoop102
do
echo ------------ Kafka $i 关闭 ------------
ssh $i '/opt/module/kafka/bin/kafka-server-stop.sh /opt/module/kafka/config/server.properties'
done
}
;;
"start"){
for i in hadoop100 hadoop101 hadoop102
do
echo ------------ Kafka $i 启动 ------------
ssh $i '/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties'
done
}
;;
esac
- (2) 修改脚本
kk.sh
具有执行权限
[xqzhao@hadoop100 bin]$ sudo chmod 777 kk.sh
2.2.3.4 使用脚本操作 Kafka 集群
# 启动集群 Kafka 服务
[xqzhao@hadoop100 bin]$ kk.sh start
`博主这里不知什么原因 start 不了,但是 stop 是可以用的`
# 关闭集群 Kafka 服务
[xqzhao@hadoop100 bin]$ kk.sh stop
声明:本文是学习时记录的笔记,如有侵权请告知删除!
原视频地址:https://www.bilibili.com/video/BV1EZ4y1G7iL