深入探索Kafka:了解其不可或缺的核心组件

🐇明明跟你说过:个人主页

🏅个人专栏:《数据流专家:Kafka探索》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言 

1、Kafka简介

2、Kafka的应用场景 

3、Kafka与其他消息队列系统的对比 

Kafka 相对优势:

Kafka 相对劣势:

Kafka 与其他消息队列系统的对比:

二、核心组件

1、Producer(生产者)

1. 生产者的基本概念

2. 生产者的工作流程

2、Consumer(消费者)

1. 消费者的基本概念

2. 消费者的工作流程

3. 消费者的配置参数

3、Broker(代理服务器)

1. Broker 的基本概念

2. Broker 的工作流程

4、Topic(主题)

1. 主题的基本概念

2. 主题的特性

5、Partition(分区) 

1. 分区的基本概念

2. 分区的特性

6、Replica(副本)

1. 副本的基本概念

2. 副本的作用


一、引言 

1、Kafka简介

Apache Kafka 是一个开源的流处理平台,由 LinkedIn 开发并捐献给 Apache 软件基金会,用于实时数据流处理。Kafka 设计用于处理实时数据流,具有高吞吐量、可扩展性和容错性,广泛用于构建实时数据管道和流处理应用。

2、Kafka的应用场景 

1. 实时日志收集与分析

  • Kafka 可以作为日志收集系统的中间件,将分布式系统产生的日志集中存储在消息队列中,并实时传输给日志处理工具(如 ELK Stack、Fluentd 等),用于实时监控、分析和报警。

 

2. 数据管道与 ETL

  • Kafka 可以用作数据管道(Data Pipeline)的关键组件,用于将数据从源系统传输到目标系统,并进行实时的转换、清洗和加工。这种场景通常用于实现数据仓库、数据湖、实时分析等数据处理需求。

 

3. 实时事件处理

  • Kafka 可以作为事件驱动架构(Event-Driven Architecture)中的消息队列,用于在分布式系统中传递事件和消息。通过使用 Kafka,可以实现实时的事件处理、流式计算、实时推荐等功能。

 

4. 流式数据处理

  • Kafka 可以与流处理框架(如 Apache Flink、Apache Spark Streaming、Kafka Streams 等)集成,用于构建实时流式数据处理应用。这种场景通常用于实时数据分析、实时报表、实时风控等需求。

 

5. 分布式应用解耦

  • Kafka 可以作为分布式应用解耦的中间件,用于将不同服务之间的通信解耦,降低系统之间的依赖性和耦合度。通过使用 Kafka,可以实现分布式系统中的事件驱动、异步通信等特性。

   

3、Kafka与其他消息队列系统的对比 

Kafka 和其他消息队列系统相比,具有一些独特的设计特点和优势,也有一些不同的应用场景和适用性。

以下是 Kafka 与其他消息队列系统(如 RabbitMQ、ActiveMQ、RocketMQ 等)的对比:

Kafka 相对优势:


1. 高吞吐量:

  • Kafka 通过分区和分布式存储实现了高吞吐量的消息处理能力,能够处理数百万条消息的传输和存储。


2. 持久性和可靠性:

  • Kafka 使用可配置的数据复制机制和持久性存储,确保消息不丢失,并且具有高度的容错性。


3. 水平可扩展性:

  • Kafka 的设计允许水平扩展,可以轻松地添加新的 Broker 和扩展集群规模,以应对增长的消息负载。


4. 高性能的消息存储和检索:

  • Kafka 使用顺序 IO 和内存映射文件等技术,实现了高性能的消息存储和检索,可以在毫秒级别的延迟下进行消息读写。


5. 灵活的消息处理能力:

  • Kafka 支持多种消息处理模式,包括发布-订阅、队列、流处理等,可以满足不同应用场景下的消息处理需求。


6. 生态系统丰富:

  • Kafka 生态系统包括各种工具和库,如 Kafka Connect、Kafka Streams、MirrorMaker 等,提供了丰富的功能和集成选项。


Kafka 相对劣势:


1. 部署和维护成本较高:

  • Kafka 的部署和维护相对复杂,需要考虑到分布式系统的配置、监控、故障恢复等方面,对运维人员的技能要求较高。


2. 实时性和延迟:

  • 尽管 Kafka 提供了低延迟的消息处理能力,但在某些场景下可能无法满足实时性要求,特别是在复杂的消息处理流程中。


Kafka 与其他消息队列系统的对比:


1. RabbitMQ:

RabbitMQ 是一个经典的 AMQP(高级消息队列协议)消息队列系统,适用于传统的消息队列应用场景,提供了更多的消息路由、交换和队列管理功能。相比之下,Kafka 更适合处理大规模的消息流和实时数据处理。


2. ActiveMQ:

ActiveMQ 是一个功能丰富的 JMS(Java 消息服务)消息队列系统,适用于 Java 开发环境中的消息通信和集成应用。Kafka 与 ActiveMQ 相比更注重高吞吐量和大规模消息处理,适用于数据管道、实时日志、流处理等场景。


3. RocketMQ:

RocketMQ 是一个由阿里巴巴开发的分布式消息队列系统,适用于企业级的消息中间件和实时数据处理应用。与 Kafka 相比,RocketMQ 提供了更多的商业特性和支持,但在分布式存储和大规模消息处理方面,Kafka 更具优势。

Kafka 与其他消息队列系统相比,具有高吞吐量、持久性、可靠性和水平扩展性等优势,适用于大规模的实时数据流处理场景。然而,根据具体的应用需求和环境特点,选择适合的消息队列系统是很重要的。

   

二、核心组件

1、Producer(生产者)

在 Kafka 中,生产者(Producer)是负责向 Kafka 集群发送消息的组件。生产者通过将消息发布到指定的主题(Topic)和分区(Partition),将数据输入到 Kafka 系统中。

1. 生产者的基本概念

  •  生产者(Producer):一个生成和发送消息的客户端应用程序。它将消息发送到 Kafka 集群中的一个或多个主题。
  • 主题(Topic):消息的类别或名称,生产者将消息发送到指定的主题中。
  • 分区(Partition):每个主题可以分为多个分区,生产者可以选择将消息发送到特定的分区,或由 Kafka 根据某些策略(如轮询、哈希等)自动选择分区。 

2. 生产者的工作流程


连接到 Kafka 集群:

生产者首先需要配置 Kafka 集群的地址和连接参数,并与 Kafka 集群建立连接。


创建消息:

生产者应用程序生成消息,消息通常包含键(Key)、值(Value)和时间戳等信息。


发送消息:

生产者将消息发送到指定的主题和分区。可以使用同步或异步方式发送消息:
同步发送:生产者等待 Kafka 返回确认信息后,再继续发送下一条消息。
异步发送:生产者将消息放入缓冲区,然后立即返回,由后台线程异步发送消息。


确认和重试:

生产者可以配置消息发送的确认机制(ack),如:

  • acks=0:生产者不等待任何确认。
  • acks=1:生产者等待 leader 分区的确认。
  • acks=all:生产者等待所有副本分区的确认。

如果消息发送失败,生产者可以配置重试机制,以确保消息成功发送。 

  

 

2、Consumer(消费者)

在 Kafka 中,消费者(Consumer)是负责从 Kafka 集群中读取和处理消息的组件。消费者从特定的主题(Topic)和分区(Partition)中获取消息,并对消息进行处理或进一步传递。

 

1. 消费者的基本概念


消费者(Consumer):一个读取和处理消息的客户端应用程序。它从 Kafka 主题中消费消息。
消费者组(Consumer Group):一组消费者实例,共同消费一个或多个主题中的消息。消费者组中的每个消费者实例会被分配到一个或多个分区,从而实现负载均衡。


2. 消费者的工作流程


1. 连接到 Kafka 集群:

  • 消费者首先需要配置 Kafka 集群的地址和连接参数,并与 Kafka 集群建立连接。


2. 订阅主题:

  • 消费者订阅一个或多个主题,可以使用主题名称或主题模式进行订阅。


3. 拉取消息:

  • 消费者从分配到的分区中拉取消息,可以设置消息拉取的批量大小、超时时间等参数。


4. 处理消息:

  • 消费者对拉取到的消息进行处理,包括数据解析、业务逻辑处理等。


5. 提交偏移量:

  • 消费者处理完消息后,需要提交消息的偏移量(offset),以记录消息处理的进度。偏移量提交可以是自动的也可以是手动的。


3. 消费者的配置参数

  • bootstrap.servers:Kafka 集群的地址列表。
  • group.id:消费者所属的消费者组的 ID。
  • key.deserializer value.deserializer:消息键和值的反序列化类,用于将字节数组转换为具体的数据类型。
  • auto.offset.reset:指定消费者在没有初始偏移量或偏移量无效时从哪里开始消费(如 earliest、latest)。
  • enable.auto.commit:是否启用自动提交偏移量。
  • auto.commit.interval.ms:自动提交偏移量的时间间隔。

   

3、Broker(代理服务器)

在 Kafka 中,代理服务器(Broker)是负责接收、存储和传输消息的核心组件。Kafka 集群通常由多个 Broker 组成,它们共同工作以提供分布式、高吞吐量和高可用性的消息系统。

 

1. Broker 的基本概念


Broker(代理服务器):Kafka 集群中的一个实例,负责接收来自生产者的消息、存储消息以及将消息发送给消费者。
Topic(主题):Broker 存储消息的逻辑分类,每个主题可以分为多个分区(Partition)。
Partition(分区):主题下的消息分区,提供并行处理和分布式存储。


2. Broker 的工作流程


1. 接收消息:

  • 生产者将消息发送到 Kafka 集群中的某个主题,Broker 接收到这些消息后将其写入对应的分区。


2. 存储消息:

  • Broker 持久化存储消息到磁盘,以保证消息的可靠性和持久性。


3. 消息复制:

  • 为了保证高可用性和容错性,每个分区可以配置多个副本(Replica),这些副本分布在不同的 Broker 上。


4. 消息消费:

  • 消费者向 Broker 请求消息,Broker 从指定的分区中读取消息并返回给消费者。


5. 管理元数据:

  • Broker 负责维护和管理主题、分区、偏移量等元数据信息,并与 Zookeeper 协同工作来管理集群状态。

   

 

4、Topic(主题)

在 Kafka 中,主题(Topic)是消息的逻辑分类单元,生产者将消息发送到指定的主题,消费者从主题中消费消息。主题在 Kafka 中起到组织和管理消息的重要作用。

 

1. 主题的基本概念


主题(Topic):消息的逻辑分类单元,类似于日志记录的类别。一个主题可以有多个生产者和多个消费者。
分区(Partition):主题的物理分片,每个主题可以分为多个分区。分区是 Kafka 并行处理和分布式存储的基础。


2. 主题的特性


1. 多生产者和多消费者:

一个主题可以有多个生产者将消息发送到该主题,也可以有多个消费者从该主题中读取消息。


2. 分区(Partitioning):

每个主题可以分为多个分区,每个分区是一个有序的、不可变的消息序列。分区使得 Kafka 可以并行处理消息,提高了吞吐量和扩展性。


3. 副本(Replication):

为了保证高可用性和容错性,每个分区可以配置多个副本(Replica),副本分布在不同的 Broker 上,确保在某个 Broker 宕机时数据不丢失。

  

5、Partition(分区) 

在 Kafka 中,分区(Partition)是主题的基本组成部分,每个主题可以分为多个分区。分区是 Kafka 并行处理和分布式存储的基础,提供了高吞吐量和容错能力。

 

1. 分区的基本概念

  • 分区(Partition):主题的物理分片,每个分区是一个有序的、不可变的消息序列。
  • Leader 副本:每个分区有一个 Leader 副本,负责处理所有的读写请求。
  • Follower 副本:每个分区可以有多个 Follower 副本,负责从 Leader 副本同步数据,以提供容错能力。


2. 分区的特性


1. 有序性:

每个分区内的消息是有序的,即消息有一个递增的偏移量(Offset)。


2. 并行处理:

不同分区可以并行处理,提高了消息处理的吞吐量。生产者可以并行地将消息发送到不同分区,消费者可以并行地从不同分区消费消息。


3. 容错性:

分区可以配置多个副本(Replica),确保在 Broker 宕机时数据不会丢失。Leader 副本负责处理请求,Follower 副本与 Leader 副本同步数据。

  

6、Replica(副本)

在 Kafka 中,副本(Replica)是为了确保数据高可用性和容错能力而设计的。每个分区可以有多个副本,这些副本分布在不同的 Broker 上。副本机制使得 Kafka 能够在部分 Broker 故障的情况下继续运行,并保证数据不丢失。

 

1. 副本的基本概念

  • 副本(Replica):每个分区可以有一个或多个副本,副本是分区的完整备份。
  • Leader 副本:每个分区的一个副本被选为 Leader 副本,负责处理所有的读写请求。
  • Follower 副本:其他副本称为 Follower 副本,负责从 Leader 副本同步数据。


2. 副本的作用


1. 数据冗余:

通过在多个 Broker 上存储分区副本,Kafka 提供了数据冗余,确保数据在单个 Broker 故障时不会丢失。


2. 高可用性:

如果 Leader 副本所在的 Broker 宕机,Kafka 会从 Follower 副本中选举新的 Leader 副本,确保分区继续可用。


3. 容错性:

副本机制使 Kafka 能够容忍部分 Broker 故障,并在故障恢复后自动重新同步数据。

  

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kafka的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode刷题】有效三角形个数、查找总价值为目标值的两个商品

【LeetCode刷题】Day 5 题目1:611.有效三角形个数思路分析:思路1:暴力枚举O(N^3^)思路2:单调性,双指针解法O(NlogNN^2^) 题目2:LCR 179.查找总价格为目标值的两个商品思路1:暴力枚举O(N^2^)思路…

网络协议——Modbus-RTU

目录 1、简介 2、消息格式 3、Modbus寄存器种类说明 4、功能码01H 5、功能码02H 6、功能码03H 7、功能码04H 8、功能码05H 9、功能码06H 10、功能码0FH 11、功能码10H 1、简介 Modbus-RTU(Remote Terminal Unit)是一种串行通信协议&#xff0…

SpringMVC源码解读[1] -Spring MVC 环境搭建

源码地址: https://github.com/chen-jiacheng/springmvc-quickstart 一、使用 IDEA 创建 Spring MVC 项目 直接创建项目即可 默认项目结构: springmvc-quickstart ├── pom.xml └── src├── main│ ├── java│ │ └── com│ │ └── chenjiache…

Stable Diffusion简单食用方法

1.下载 1.1打开B站 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili哔哩哔哩(bilibili.com)是国内知名的视频弹幕网站,这里有及时的动漫新番,活跃的ACG氛围,有创意的Up主。大家可以在这里找到许多欢乐。https://www.bilibili.com/ 1.2搜索…

521源码-免费教程-Linux系统硬盘扩容教程

本教程来自521源码:更多网站源码下载学习教程,请点击👉-521源码-👈获取最新资源 首先:扩容分区表 SSH登陆服务器输入命令:df -TH,获得数据盘相关信息 可以看到演示服务器的数据盘分区是&…

css扇形菜单动画效果

菜单组件 IntelligentAnalysis.vue 中间圆形区域可以换个图片 <template><div class"intel-analysis"><div class"info" :class"{ close-animation: !showMenu }"><div class"middle"></div><div cl…

【工具使用】搜狗输入法如何输入希腊字母等特殊字符

步骤&#xff1a; 1&#xff0c;点击悬浮框的输入方式&#xff0c;选择“符号大全”&#xff1a; 2&#xff0c;根据自己需要选择对应的符号即可&#xff1a;

Power BI实现动态度量值

假设有一张销售数据表Sale: 报表上有一个切片器(Slicer)(下拉框样式)&#xff0c; 当选择"第一"时&#xff0c;计算列[FirstSale]与列[Target]的百分比&#xff0c; 选择"第二"时&#xff0c;计算列[SecondSale]与列[Target]的百分比 选择"第三&qu…

3d数字化虚拟交互展厅让您紧跟时代的步伐

虚实融合打破边界&#xff0c;北京VR虚拟数字展厅搭建让体验者彷如置身于一部三维电影中&#xff0c;可以对场景中的物体、角色、模型进行自由参观和体验&#xff0c;并且系统支持随时更新&#xff0c;让您紧跟时代的步伐&#xff0c;领略更新的展览风采。 除了常见的科普培训&…

docker- 购建服务镜像并启动

文章目录 前言docker- 购建服务镜像并启动1. 前期准备2. 构建镜像3. 运行容器4. 验证 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实…

软考中级嵌入式系统设计师知识点

主要介绍一些软考中级嵌入式系统设计师涉及到的一些考点。 文章目录 前言 一、嵌入式系统设计师 二、知识点 总结 前言 主要介绍一些软考中级嵌入式系统设计师涉及到的一些考点。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、嵌入式系统设计师 …

宝塔面包安装搭建Flarum开源论坛程序 文档教程

一、服务器环境说明 宝塔 7.0.3 或更新版本 Linux Server&#xff08;本文用的是 CentOs 7.4.6 64位&#xff09; Apache 或者 Nginx&#xff08;本文用的是 Nginx 1.16.0&#xff09; MySQL 5.6&#xff08;本文使用 MySQL 5.7&#xff0c;原因请看下方引用&#xff09; PHP 7…

项目集成SkyWalking,基于k8s搭建

一、搭建SkyWalking 官方文档&#xff08;英文&#xff09;&#xff1a;skywalking/docs at master apache/skywalking 中文可以使用&#xff1a;GitHub - SkyAPM/document-cn-translation-of-skywalking: [已过期,请使用官网AI文档] The CN translation version of Apache…

解决脚本刷服务器导致卡顿宕机的问题

在互联网服务领域&#xff0c;自动化脚本的不当使用或恶意攻击可能会导致服务器资源被过度消耗&#xff0c;从而引发服务响应缓慢甚至系统崩溃。特别是在电商、游戏、社交平台等领域&#xff0c;这种现象尤为常见。本文将深入探讨脚本刷服的常见形式、其对服务器性能的影响&…

计算机专业实习生应该去哪实习?

计算机专业实习生可以选择在各种不同类型的公司和组织中实习。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 这取…

Harmony学习笔记一——项目创建及配置

文章基于Harmony Next Preview2 进行学习&#xff0c;其他版本可能会稍有不同 准备工作 由于目前Harmony Next仅有Preview版本&#xff0c;想要进行Harmony Next开发需要向华为申请权限&#xff0c;具体操作参考: https://developer.huawei.com/consumer/cn/forum/topic/02081…

MySQL查询---单、多表实例

目录 一、素材准备 建表 插入数据&#xff1a; 二、单表查询 三、多表查询 要求&#xff1a; 步骤&#xff1a; 1、建立新的数据库db_calss&#xff0c;以及按照要求建立student表 2.查看已经建立表的属性&#xff0c;并按照要求修改年龄字段属性 3.按照要求建立SC表 …

AI播客下载:Create Like the Greats(主题是AI和市场营销)

《Create Like the Greats》是由Ross Simmonds主持的播客&#xff0c;旨在深入探讨创业、创造过程中的各种问题和挑战。该播客专注于揭示成功创作者的背后故事和策略。 该播客的第一集详细讲述了MasterClass如何建立起一个价值28亿美元的教育科技帝国。这一集不仅展示了Master…

stm32学习-光敏传感器控制蜂鸣器

接线 GPIO配置 初始化GPIO 1.使用RCC开启GPIO时钟 void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); 作用&#xff1a;外设时钟控制(根据外设连接的总线选择要开启的时钟&#xff09; RCC_AHBPeriph/RCC_APB2Periph/RCC_APB1Periph&#x…

5、HTTP header注入(详解)

1、知识补充 本篇主要演示user-Agent和Cookie注入 以下是一些可能的HTTP header注入点&#xff1a; User-Agent: 有些网站可能会记录并分析访问者的User-Agent字符串以了解用户的浏览器和设备信息。如果这些信息被用于动态生成SQL查询&#xff0c;并且没有进行适当的输入验证或…