Kafka 概述与安装部署整理
Kafka 概述与安装部署整理
一、Kafka 概述
Kafka 最初由 LinkedIn 公司开发,是一个分布式、支持分区、多副本、基于 ZooKeeper 协调的分布式消息系统。它使用 Scala 语言编写,于 2010 年贡献给 Apache 基金会并成为顶级开源项目。
核心特性:
- 高吞吐量、低延迟
- 持久化消息存储
- 可扩展性强
- 支持多副本冗余
- 支持流式处理
适用场景:
- 实时数据处理
- 日志聚合与分析
- 流处理(如 Storm、Spark Streaming)
- 消息中间件
- 行为追踪
二、消息队列通信模式
1. 点对点模式(Point-to-Point)
- 基于拉取或轮询模型
- 每条消息仅被一个消费者处理
- 消费者主动拉取消息,可控制频率
- 缺点:消费者需轮询检查新消息
2. 发布订阅模式(Pub-Sub)
- 基于推送模型
- 一条消息可被多个订阅者消费
- 消费者被动接收消息
- 问题:推送速率难以匹配不同消费者的处理能力
三、Kafka 架构原理
Kafka 是一个高吞吐的分布式发布订阅消息系统,具备高性能、持久化、多副本备份和横向扩展能力。
核心组件:
| 组件 | 说明 | 
|---|---|
| Producer | 消息生产者,向 Kafka 写入消息 | 
| Broker | Kafka 服务实例,每个服务器可运行多个 Broker | 
| Topic | 消息主题,用于分类存储消息 | 
| Partition | Topic 的分区,提升并发和吞吐量 | 
| Replication | 分区的副本,提高可用性 | 
| Consumer | 消息消费者,从 Kafka 读取消息 | 
| Consumer Group | 多个消费者组成一个组,共同消费一个 Topic | 
| ZooKeeper | 存储 Kafka 集群元数据,管理 Broker 和消费者状态 | 
数据流特点:
- 消息顺序写入分区,保证分区内有序
- Producer 推送到 Broker,Consumer 从 Broker 拉取
- Follower 主动从 Leader 同步数据
四、Kafka 集群安装部署(基于 ZooKeeper)
环境准备
- 
三台服务器:192.168.100.10/20/30 
- 
关闭防火墙和selinux 
- 
配置时间同步 
- 
配置 /etc/hosts
- 
配置免密钥 
安装 Java
[root@node1 ~]# mkdir /opt/software
[root@node1 ~]# cd /opt/software/
[root@node1 software]# tar -zxvf jdk-8u181-linux-x64.tar.gz
[root@node1 software]# vim /etc/profile
[root@node1 software]# source /etc/profile
export JAVA_HOME=/opt/software/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@node1 software]# scp -r jdk1.8.0_181/ root@node2:/opt/software/
[root@node1 software]# scp -r jdk1.8.0_181/ root@node3:/opt/software/
[root@node1 software]# scp /etc/profile root@node2:/etc/profile
[root@node1 software]# scp /etc/profile root@node3:/etc/profile
三台主机全部都source一下/etc/profile
[root@node2 ~]# source /etc/profile
[root@node3 ~]# source /etc/profile
安装 ZooKeeper 集群
[root@node1 software]# tar -zxvf zookeeper-3.4.8.tar.gz ^C
[root@node1 software]# mv zookeeper-3.4.8 zookeeper
[root@node1 software]# chown -R root.root zookeeper
[root@node1 software]# cd zookeeper/
[root@node1 zookeeper]# mkdir data logs
[root@node1 zookeeper]# cd conf/
[root@node1 conf]# cp zoo_sample.cfg zoo.cfg
[root@node1 conf]# vim zoo.cfg 
[root@node1 conf]# echo 1 > /opt/software/zookeeper/data/myid
# 修改 dataDir 参数内容如下: 
dataDir=/opt/software/zookeeper/data# 在文档最末尾填写如下几行
server.1=192.168.100.10:2888:3888
server.2=192.168.100.20:2888:3888
server.3=192.168.100.30:2888:3888
[root@node1 conf]# cd /opt/software/
[root@node1 software]# scp -r zookeeper/ root@node2:/opt/software/
[root@node1 software]# scp -r zookeeper/ root@node3:/opt/software/
在每个节点的
data目录下创建myid文件,分别写入 1、2、3
[root@node2 ~]# echo 2 > /opt/software//zookeeper/data/myid
[root@node3 ~]# echo 3 > /opt/software/zookeeper/data/myid
启动 ZooKeeper
配置 zookeeper 的环境变量
[root@node1 ~]# vim /etc/profile
[root@node1 ~]# source /etc/profile
export ZOOKEEPER_HOME=/opt/software/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
[root@node1 ~]# scp /etc/profile root@node2:/etc/profile 
[root@node1 ~]# scp /etc/profile root@node3:/etc/profile
三台主机全部都source一下/etc/profile
[root@node2 ~]# source /etc/profile
[root@node3 ~]# source /etc/profile
三台主机都启动 zookeeper 并查询一下 zookeeper 状态
发现有两个 follower ,一个 leader
[root@node1 ~]# zkServer.sh start
[root@node1 ~]# zkServer.sh status
[root@node2 ~]# zkServer.sh start
[root@node2 ~]# zkServer.sh status
[root@node3 ~]# zkServer.sh start
[root@node3 ~]# zkServer.sh status
安装 Kafka
[root@node1 ~]# tar -zxvf kafka_2.11-2.4.0.tgz
# 在配置文件中找到以下两行并注释掉(在文本前加#)如下所示:
#broker.id=0
#zookeeper.connect=localhost:2181# 在末尾添加
broker.id=1
zookeeper.connect=192.168.100.10:2181,192.168.100.20:2181,192.168.100.30:2181
listeners = PLAINTEXT://192.168.100.10:9092
[root@node1 ~]# scp -r kafka_2.11-2.4.0/ root@node2:/root/
[root@node1 ~]# scp -r kafka_2.11-2.4.0/ root@node3:/root/
修改zookeeper2主机的kafka配置文件
[root@node2 ~]# vim kafka_2.11-2.4.0/config/server.properties
broker.id=2
zookeeper.connect=192.168.100.10:2181,192.168.100.20:2181,192.168.100.30:2181
listeners = PLAINTEXT://192.168.200.20:9092
修改zookeeper3主机的kafka配置文件
[root@node3 ~]# vim kafka_2.11-2.4.0/config/server.properties
broker.id=3
zookeeper.connect=192.168.100.10:2181,192.168.100.20:2181,192.168.100.30:2181
listeners = PLAINTEXT://192.168.200.30:9092
三台主机全部启动 kafka
[root@node1 ~]# ./kafka_2.11-2.4.0/bin/kafka-server-start.sh -daemon ./kafka_2.11-2.4.0/config/server.properties
[root@node2 ~]# ./kafka_2.11-2.4.0/bin/kafka-server-start.sh -daemon ./kafka_2.11-2.4.0/config/server.properties
[root@node3 ~]# ./kafka_2.11-2.4.0/bin/kafka-server-start.sh -daemon ./kafka_2.11-2.4.0/config/server.properties
查看
[root@node1 ~]# jps
8147 Kafka
8739 Jps
7624 QuorumPeerMain
[root@node2 ~]# jps
7587 QuorumPeerMain
8099 Kafka
8200 Jps
[root@node3 ~]# jps
8209 Jps
7586 QuorumPeerMain
8094 Kafka
