Kafka 深度剖析

embedded/2025/1/12 1:04:16/

Kafka 深度剖析:从基础概念到集群实战

在当今大数据与分布式系统蓬勃发展的时代,Apache Kafka 作为一款极具影响力的分布式发布 - 订阅消息系统,宛如一颗璀璨的明星,照亮了数据流转与处理的诸多场景。它由 LinkedIn 公司于 2010 年慷慨贡献给 Apache 基金会,并迅速晋升为顶级开源项目,凭借其独特卓越的设计理念与强大非凡的性能优势,赢得了全球开发者的青睐。

一、Kafka 探秘:核心特性与架构精要

(一)卓越性能尽显风采

  1. 高吞吐量、超低延迟:Kafka 仿若一台高效运转的超级引擎,具备令人惊叹的消息处理实力,每秒能够闪电般处理几十万条消息,延迟更是低至几毫秒的极致境界。其秘诀在于巧妙的架构设计,每个 topic(主题)犹如一座数据宝库,可精细划分成多个 partition(分区),而 consumer group(消费者组)则如同训练有素的寻宝团队,能够对 partition 进行 consume(消费)操作,让数据如奔腾的江水般畅快流转,极大地提升了整体效率。
  2. 极致可扩展性:面对业务的飞速增长与数据洪流的汹涌来袭,Kafka 集群展现出非凡的应变能力,支持热扩展特性。这意味着在业务系统毫不停歇、正常运行的关键时刻,我们能够从容不迫地增加节点,如同为高速行驶的列车无缝拼接车厢,轻松应对不断攀升的数据量与复杂多变的业务需求,确保系统始终稳健前行。
  3. 坚如磐石的持久性、可靠性:数据安全是重中之重,Kafka 深谙此道,它将消息稳稳地持久化存储到本地磁盘,同时精心打造了多重数据备份机制,犹如为珍贵的数据穿上了坚固的铠甲,有效防止数据丢失,为各类对数据可靠性要求严苛的应用场景筑牢了坚实根基,让使用者无后顾之忧。
  4. 强大容错本领:在复杂多变的分布式环境中,节点故障时有发生,而 Kafka 却能处变不惊。当副本数量设定为 n 时,它凭借卓越的 “容错设计,可以允许 n - 1 个节点出现故障,如同拥有多艘坚实的后备船只,即便部分船只受损,舰队依然能够乘风破浪,稳定地为用户提供服务,确保数据传输与处理的连续性。
  5. 卓越高并发处理能力:无论是熙熙攘攘的电商购物高峰,还是海量设备并发连接的物联网场景,Kafka 都能游刃有余。它能够同时支持数千个客户端如潮水般涌入,同时进行读写操作,以卓越的并发处理能力,完美满足大规模并发业务场景下的数据交互刚需,确保系统响应迅速,不卡顿、不延迟。

(二)精妙存储策略揭秘

  1. 以 topic 为核心的消息管理体系:Kafka 构建了一套以 topic 为枢纽的消息管理架构,每个 topic 宛如一个装满宝箱的神秘宝库,里面包含多个 partition,而每个 partition 又对应一个逻辑 log,这些逻辑 log 由多个 segment 组成,以此构建起层次分明的消息存储结构,让数据的存储与检索如同在图书馆中找书一般便捷高效。
  2. 高效消息定位机制:在 segment 中存储多条消息,消息的 id 由其逻辑位置决定,通过消息 id 可直接定位到消息的存储位置,避免了额外的 id 到位置的映射操作,提高了消息查找和读取的效率。
  3. 智能内存索引机制:每个 part 在内存中对应一个 index,用于记录每个 segment 中的第一条消息偏移,方便在处理消息时快速定位到相应 segment 的起始位置。
  4. 科学消息分布与写入规则:发布者发到某个 topic 的消息会被均匀地分布到多个 partition 上(也可根据用户指定的路由规则进行分布)。broker 收到发布消息后,会往对应 partition 的最后一个 segment 上添加该消息。当某个 segment 上的消息条数达到配置值,或者消息发布时间超过规定值时,segment 上的消息会被 flush(刷新)到磁盘,只有 flush 到磁盘上的消息订阅者才能订阅到。而且当 segment 达到一定的大小后,将不会再往该 segment 写数据,broker 会创建新的 segment 继续存储消息。

(三)关键名词深度解读

  1. Broker:即 Kafka 节点,一个 Kafka 节点就是一个 broker,多个 broker 可以组成一个 Kafka 集群,共同承担消息的处理和存储等任务。
  2. Topic:代表一类消息,可理解为消息存放的目录,也就是主题。例如 page view 日志、click 日志等都能以 topic 的形式存在,Kafka 集群能够同时负责多个 topic 的分发工作。
  3. Message:是 Kafka 中最基本的传递对象,承载着实际需要传递的数据内容。
  4. Partition:为 topic 物理上的分组,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列,有助于提高消息处理的并行度和效率。
  5. Segment:partition 物理上由多个 segment 组成,每个 Segment 存储着 message 信息,是消息存储的具体单元。
  6. Producer:指生产者,负责生产 message 并发送到 topic,是消息流入 Kafka 系统的源头。
  7. Consumer:即消费者,通过订阅 topic 来消费 message,在实际运行中可以作为一个线程来执行消费操作。
  8. Consumer Group:消费者组,一个 Consumer Group 包含多个 consumer,组内的消费者可以协同工作,共同消费 topic 中的消息,实现负载均衡和消息的灵活分配。
  9. Offset:偏移量,可简单理解为消息 partition 中的索引,用于记录消费者消费消息的位置,方便实现消息的顺序消费以及断点续传等功能。

二、Zookeeper 集群搭建:开启 Kafka 之旅的关键前奏

(一)JDK 1.8 环境部署:基石奠定

在开启 Zookeeper 与 Kafka 的精彩探索之旅前,为每台服务器节点精心安装 JDK 1.8 环境是必不可少的关键一步。如同建造高楼大厦需先夯实地基一般,待安装完成后,使用 java -version 命令进行严谨测试,确保 JDK 环境安装无误且能顺畅运行,为后续复杂的软件安装与配置工作提供坚实的底层支撑。

(二)Zookeeper 安装包获取与解压:筹备启航

  1. 下载安装包:以 Zookeeper 3.9.3 版本为例,通过神奇的 wget 命令,从网络的浩瀚海洋中精准捕捞 Zookeeper 安装包:wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.9.3/apache-zookeeper-3.9.3-bin.tar.gz,如同获取开启宝藏之门的钥匙。
  2. 解压安装包:使用 tar -zxvf apache-zookeeper-3.9.3.tar.gz 命令,轻轻解开安装包的神秘封印,释放其中蕴含的强大能量。
  3. 重命名文件夹:为了后续操作的便捷与清晰,将解压后的文件夹重命名为 zookeeper,执行 mv apache-zookeeper-3.9.3 zookeeper 命令,让一切井然有序。

(三)Zookeeper 集群环境精心雕琢:集群构建

  1. 配置文件深度定制
    • 首先,如同探险家深入神秘洞穴般,进入配置文件所在目录 cd /usr/local/zookeeper/conf,将示例配置文件 zoo_sample.cfg 郑重重命名为 zoo.cfg,mv zoo_sample.cfg zoo.cfg,开启配置之旅。
    • 接着,使用 vi zoo.cfg 命令精心修改配置内容,主要聚焦两处关键设置:其一,设置 dataDir 参数,指定 Zookeeper 存储数据的目录,例如 dataDir=/usr/local/zookeeper/data (同时需要 Zookeeper 中创建 data 目录);其二,在文件最后面添加集群节点信息,格式如下:server.0=10.10.10.208:2888:3888,server.1=10.10.10.216:2888:3888,server.2=10.10.10.202:2888:3888,如同绘制集群协作的蓝图,让节点之间能够精准通信。
  2. 服务器标识创建
    • 先创建用于种放服务器标识的文件夹 data,执行 mkdir data 命令,为服务器打造独特身份标识。
    • 再创建文件 myid 并填写相应内容,使用 vi myid 命令,依据服务器节点的角色,分别赋予它们独一无二的标识数字,如 0、1、2 等,让每个服务器在集群中都能被精准识别。
  3. Zookeeper 复制与扩散:将配置好的 zookeeper 目录完整复制到其他相关服务器节点(如 10.10.10.216 和 10.10.10.202),同时复制 /etc/profile 文件。并且要将 10.10.10.216、10.10.10.202 中的 myid 文件里的值分别修改为 1 和 2(修改路径为 vi /usr/local/zookeeper/data/myid),让每个节点明确自身身份。
  4. 防火墙屏障拆除:在每台服务器节点上关闭防火墙,以避免防火墙规则对 Zookeeper 集群通信造成干扰,执行命令如下 systemctl stop firewalld.service
  5. 环境变量注入活力:编辑 /etc/profile 文件,如同为系统注入一剂强心针,添加如下内容:export ZOOKEEPER_HOME=/usr/local/zookeeper,export PATH=ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf,赋予 Zookeeper 运行所需的环境路径,让它能在系统中自由驰骋。添加完成后,执行 source /etc/profile 命令,使修改后的环境变量生效。
  6. Zookeeper 启动点火:进入 Zookeeper 的启动脚本所在路径 /usr/local/zookeeper/bin, 执行启动命令 zkServer.sh start,如同点燃火箭引擎,推动 Zookeeper 集群腾飞。需要特别注意的是,集群中的每台机器都要执行此启动命令。启动后,可以通过 zkServer.sh status 命令在三个节点上校验 Zookeeper 的运行模式。

三、Kafka 集群搭建:构建数据流转的高速通道

(一)Kafka 压缩包下载与解压:开启征程

在 3 台虚拟机上均执行以下操作,先进入 /usr/local/ 目录,下载 Kafka 压缩包(以 Kafka 3.9.0 版本为例),然后解压并重命名:cd /usr/local/wget https://downloads.apache.org/kafka/3.9.0/kafka_2.12-3.9.0.tgztar -zxvf kafka_2.12-3.9.0.tgzmv kafka_2.12-3.9.0 kafka

(二)配置文件个性化定制:适配节点

分别在不同的虚拟机上,根据其自身的 IP 地址对./kafka/config/server.properties 文件进行修改,具体如下:
对于 10.10.10.208 这台虚拟机:

  • broker.id=0
  • listeners=PLAINTEXT://10.10.10.208:9092
  • zookeeper.connect=10.10.10.208:2181,10.10.10.216:2181,10.10.10.202:2181
    对于 10.10.10.216 这台虚拟机:
  • broker.id=1
  • listeners=PLAINTEXT://10.10.10.216:9092
  • zookeeper.connect=10.10.10.208:2181,10.10.10.216:2181,10.10.10.202:2181
    对于 10.10.10.202 这台虚拟机:
  • broker.id=2
  • listeners=PLAINTEXT://10.10.10.202:9092
  • zookeeper.connect=10.10.10.208:2181,10.10.10.216:2181,10.10.10.202:2181

(三)系统环境变量赋能:打通脉络

编辑 /etc/profile 文件,在文件最下方添加 Kafka 路径相关的环境变量,内容如下:
export KAFKA_HOME=/usr/local/kafka
export PATH=PATH
添加完成后,执行 source /etc/profile 命令使修改后的环境变量生效。

四、Kafka 集群环境测试:实战检验真理

(一)在三台机器上分别开启 Zookeeper 程序:

/usr/local/zookeeper/bin/zkServer.sh start,启动成功后,通过以下命令查看 zookeeper 集群的状态
/usr/local/zookeeper/bin/zkServer.sh status
若出现 Mode:follower 或是 Mode:leader,则代表 Zookeeper 启动成功。

(二)启动 Kafka 程序并检查启动情况

在后台开启 3 台虚拟机的 Kafka 程序(先进入 /usr/local/kafka 目录):
./bin/kafka-server-start.sh -daemon config/server.properties
-daemon 参数表示 Kafka 服务器将在后台运行,不会占用当前的终端会话。启动后,可以通过 ps aux | grep ‘kafka’ 命令查看 Kafka 是否启动成功。

(三)创建 topic 并进行消息发送与消费测试

  1. 创建 topic:在其中一台虚拟机 (如 10.10.10.208) 上创建 topic,执行命令如下
    /usr/local/kafka/bin/kafka-topics.sh --create --bootstrap-server 10.10.10.208:9092 --replication-factor 1 --partitions 3 --topic test
    各参数含义如下:
    –create:指定正在创建一个新的主题。
    –bootstrap-server:9092:指定 kafka 实例的地址。
    –replication-factor 1:每个分区的复制因子为 1,即每个分区将有一个副本。
    -partitions:指定 topic 分区主体一共有多少个。
    –topic:指定 topic 主体名称。
  2. 查看 topic 信息:通过以下命令查看创建的 topic 信息:
    ./bin/kafka-topics.sh --list --bootstrap-server 10.10.10.208:9092
  3. 发送消息:在 10.10.10.208 这台虚拟机上发送一些消息到创建的 topic 中,执行命令如下:
    bin/kafka-console-producer.sh --broker-list 10.10.10.208:9092 --topic test
  4. 消费消息:在另一台虚拟机(如 10.10.10.216)上启动一个 consumer(消费者)来消费消息,执行命令如下:
    bin/kafka-console-consumer.sh --bootstrap-server 10.10.10.216:9092 --topic test --from-beginning

http://www.ppmy.cn/embedded/153166.html

相关文章

前端实时显示当前在线人数的实现

实时显示当前在线人数的实现 本文档提供了在网页上实时显示当前在线人数的多种实现方法,包括使用 WebSocket 实现实时更新和轮询方式实现非实时更新。 方法一:使用 WebSocket 实现实时更新 服务器端设置 通过 Node.js 和 WebSocket 库(如 …

STM32的存储结构

STM32F103 芯片是基于 ARM Cortex-M3 内核的微控制器,它集成了多种类型的存储器,每种存储器都有其特定的作用和存储对象。以下是关于 STM32F103 中 Flash、ROM 和 SRAM 的详细介绍: 1. Flash Memory (闪存) 作用:Flash 是非易失性…

浅析大语言模型安全和隐私保护国内外标准和政策

过去两年,大模型技术已经普及并逐步渗透到各行各业,2025年注定是大模型应用井喷式发展的一年,AI在快速发展的同时,其带来的安全风险也逐渐凸显。人工智能系统的安全性和隐私保护已经成为社会关注的重点。 附下载:600多…

PyCharm创建Django程序

查找关闭端口 netstat -ano | findstr :8000 taskkill /PID 21376 /F 1、pip install django 2、创建项目 django-admin startproject mydjango 3、运行django项目 python manage.py runserver 4、创建应用 python manage.py startapp myapp 5、注册应用:在 mydjang…

【神经网络中的激活函数如何选择?】

在神经网络中,激活函数的选择对于模型的性能和学习效率至关重要。以下是一些关于如何选择激活函数的建议: 一、隐藏层中的激活函数选择 ReLU及其变体: ReLU(Rectified Linear Unit,修正线性单元)&#xff…

多模态人工智能在零售业的未来:通过GPT-4 Vision和MongoDB实现智能产品发现

多模态人工智能在零售业的未来:通过GPT-4 Vision和MongoDB实现智能产品发现 引言 想象一下,顾客在购物时只需上传一张他们所期望的服装或产品的照片,几分钟内便能收到来自他们最喜欢的商店的个性化推荐。这就是多模态人工智能在零售领域所带…

【NLP 19、词的向量化和文本向量化】

祝我们都能在各自的选择中渐入佳境 —— 25.1.8 一、向量化 向量对于机器学习非常重要 大量的算法都需要基于向量来完成 1.文本向量化 对于机器来说,字符是没有含义的,只是有区别 只使用字符无法去刻画字与字、词与词、文本与文本之间的关系 文本转…

网工考试下午题目笔记

1、在防火墙设备中,配置双出口链路有提高总带宽、链路负载均衡、提高可靠性的作用,通过配置链路聚合提高总带宽,通过配置策略路由提高链路负载均衡 防火墙工作模式有路由模式(防火墙接口配有IP地址)、透明模式(防火墙相当于不存在)、混合模式…