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
相关推荐
陈果然DeepVersion8 小时前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(三)
spring boot·kafka·消息队列·java面试·大厂面试题·rag·ai智能客服
AcrelGHP9 小时前
光储充微电网能量管理系统:构建绿色、高效、安全的能源未来
大数据·运维·人工智能
罗不俷9 小时前
【Hadoop】Hadoop 起源与核心组件解析 —— 大数据时代的分布式基石
大数据·hadoop·分布式
冬夜戏雪11 小时前
[尚庭公寓P91-P104-及服务器服务的连接]
运维·服务器
Jewel Q11 小时前
防火墙NAT策略处理流程
运维·服务器·网络
失重外太空啦12 小时前
NFS服务器的搭建
运维·服务器·网络
Jonathan Star12 小时前
网站识别爬虫(包括以浏览器插件形式运行的爬虫)主要通过分析请求特征、行为模式等差异来区分人类用户和自动化程序
运维·爬虫·自动化
Once_day12 小时前
Linux错误(7)接口处于Down状态不通告IPv6地址变更事件
linux·运维·服务器
Bruce_Liuxiaowei12 小时前
SMB签名关闭的安全风险探讨
运维·windows·安全·网络安全