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
相关推荐
酷可达拉斯11 小时前
Linux操作系统-升级OpenSSH修复漏洞
linux·运维·服务器·云计算
张龙68712 小时前
Docker 镜像瘦身实战:从 1.2GB 到 128MB,我踩过的 7 个坑和一套可复制的方法论
运维·后端·docker
外滩运维专家13 小时前
Nginx 上的通配符证书 90 天到期,续签这事我是这么搞的
运维
科技新资讯14 小时前
国内AI影视制作服务商哪家口碑好
运维·人工智能·devops
IT摆渡者15 小时前
ubuntu系统网络问题
linux·运维·ubuntu
kdxiaojie15 小时前
Linux 驱动研究 —— SDIO (1)
linux·运维·笔记·学习·sdio
YOU OU15 小时前
RabbitMQ应用问题
分布式·rabbitmq
ZzzZZzzzZZZzzzz…15 小时前
K8S实战:NFS+StorageClass+PV/PVC+Deployment
运维·云原生·容器·kubernetes·storageclass·linux运维·持久卷
BerrySen17815 小时前
一个 JDBC 参数引发的架构演进:Apache SeaTunnel 如何解决数据同步中的“定时 Flush”难题
运维·自动化·zabbix
杨_晨16 小时前
Linux查看本地环境变量的命令
linux·运维·服务器