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
bash 复制代码
[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
ini 复制代码
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
bash 复制代码
[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

bash 复制代码
[root@node2 ~]# source /etc/profile
bash 复制代码
[root@node3 ~]# source /etc/profile
安装 ZooKeeper 集群
bash 复制代码
[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
ini 复制代码
# 修改 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
bash 复制代码
[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

bash 复制代码
[root@node2 ~]# echo 2 > /opt/software//zookeeper/data/myid
bash 复制代码
[root@node3 ~]# echo 3 > /opt/software/zookeeper/data/myid
启动 ZooKeeper

配置 zookeeper 的环境变量

bash 复制代码
[root@node1 ~]# vim /etc/profile
[root@node1 ~]# source /etc/profile
ini 复制代码
export ZOOKEEPER_HOME=/opt/software/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
bash 复制代码
[root@node1 ~]# scp /etc/profile root@node2:/etc/profile 
[root@node1 ~]# scp /etc/profile root@node3:/etc/profile

三台主机全部都source一下/etc/profile

bash 复制代码
[root@node2 ~]# source /etc/profile
bash 复制代码
[root@node3 ~]# source /etc/profile

三台主机都启动 zookeeper 并查询一下 zookeeper 状态

发现有两个 follower ,一个 leader

bash 复制代码
[root@node1 ~]# zkServer.sh start
[root@node1 ~]# zkServer.sh status
bash 复制代码
[root@node2 ~]# zkServer.sh start
[root@node2 ~]# zkServer.sh status
bash 复制代码
[root@node3 ~]# zkServer.sh start
[root@node3 ~]# zkServer.sh status
安装 Kafka
bash 复制代码
[root@node1 ~]# tar -zxvf kafka_2.11-2.4.0.tgz
ini 复制代码
# 在配置文件中找到以下两行并注释掉(在文本前加#)如下所示:
#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
bash 复制代码
[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配置文件

bash 复制代码
[root@node2 ~]# vim kafka_2.11-2.4.0/config/server.properties
ini 复制代码
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配置文件

bash 复制代码
[root@node3 ~]# vim kafka_2.11-2.4.0/config/server.properties
bash 复制代码
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

bash 复制代码
[root@node1 ~]# ./kafka_2.11-2.4.0/bin/kafka-server-start.sh -daemon ./kafka_2.11-2.4.0/config/server.properties
bash 复制代码
[root@node2 ~]# ./kafka_2.11-2.4.0/bin/kafka-server-start.sh -daemon ./kafka_2.11-2.4.0/config/server.properties
bash 复制代码
[root@node3 ~]# ./kafka_2.11-2.4.0/bin/kafka-server-start.sh -daemon ./kafka_2.11-2.4.0/config/server.properties

查看

bash 复制代码
[root@node1 ~]# jps
8147 Kafka
8739 Jps
7624 QuorumPeerMain
bash 复制代码
[root@node2 ~]# jps
7587 QuorumPeerMain
8099 Kafka
8200 Jps
bash 复制代码
[root@node3 ~]# jps
8209 Jps
7586 QuorumPeerMain
8094 Kafka
相关推荐
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ40 分钟前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔2 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密2 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20152 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑
卷福同学3 小时前
【养虾日记】QClaw操作浏览器自动化发文
运维·人工智能·程序人生·自动化
发际线还在3 小时前
互联网大厂Java三轮面试全流程实战问答与解析
java·数据库·分布式·面试·并发·系统设计·大厂
woho7788994 小时前
不同网段IP的网络打印机,打印、扫描设置
运维·服务器·网络
耗子会飞4 小时前
小白学习固定VM虚拟机的centos服务器的IP
运维·服务器·centos
门豪杰5 小时前
Ubuntu下安装Claude Code
linux·运维·ubuntu·claude·claude code
新新学长搞科研5 小时前
第五届电子、集成电路与通信技术国际学术会议(EICCT 2026)
运维·人工智能·自动化·集成测试·信号处理·集成学习·电气自动化