深入探索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的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【线性回归】梯度下降

文章目录 [toc]数据数据集实际值估计值 梯度下降算法估计误差代价函数学习率参数更新 Python实现导包数据预处理迭代过程结果可视化完整代码 结果可视化线性拟合结果代价变化 数据 数据集 ( x ( i ) , y ( i ) ) , i 1 , 2 , ⋯ , m \left(x^{(i)} , y^{(i)}\right) , i 1 ,…

使用 Django Rest Framework 构建强大的 Web API

文章目录 安装 Django Rest Framework创建序列化器创建视图和 URL 路由配置认证和权限测试 API Django Rest Framework(DRF)是一个强大的工具,用于在 Django Web 框架中构建灵活且功能丰富的 Web API。它提供了许多功能,包括序列化…

微服务项目收获和总结---第2,3天(分库分表思想,文章业务)

①分库分表思想 文章表一对一为什么要拆分?因为文章的内容会非常大,查询效率会很低,我们经常操作文章的基本信息,不会很经常查询文章内容。充分发挥高频数据的操作效率。 ②freemarker和minIO 由于文章内容数据量过大&#xff0c…

FreeRTOS_同步互斥与通信_队列集_学习笔记

FreeRTOS_同步互斥与通信_环形buffer、队列_学习笔记 5.5 队列集 要支持多个输入设备时,我们需要实现一个“InputTask”,它读取各个设备的队列,得到数据后再分别转换为游戏的控制键。 InputTask如何及时读取到多个队列的数据?要…

(十)统计学基础练习题四(50道选择题)

本文整理了统计学基础知识相关的练习题,共50道,适用于想巩固统计学基础或备考的同学。来源:如荷学数据科学题库(技术专项-统计学一)。序号之前的题请看往期文章。 151) 152) 153) 1…

React 其他 Hooks

其他 Hooks useRef 可用于获取 DOM 元素 const ScrollRef useRef(null)ScrollRef.current useContext (先回顾一下之前的 Context 知识,借用之前 ppt 和源码) Hooks 中使用 useContext 来获取 context 的值 // 父组件创建 contextexpor…

I/O '24|学习资源焕新,技术灵感升级

2024 年 5 月 15 日凌晨举行的 Google I/O 大会为各地的开发者们带来了新的灵感。面对技术革新,相信各位开发者们都迫不及待想要自己上手试一试。 别急,Google 谷歌今年为中国的开发者们准备了一份特别的学习资源,让开发者们自由探索新知。 G…

WebSocket简介

参考:Java NIO实现WebSocket服务器_nio websocket-CSDN博客 WebSocket API是HTML5中的一大特色,能够使得建立连接的双方在任意时刻相互推送消息,这意味着不同于HTTP,服务器服务器也可以主动向客户端推送消息了。 WebSocket协议是…

【Linux学习】深入理解Linux环境变量与本地变量

文章目录 环境变量的引入环境变量环境变量概念环境变量的特性以及命令行操作本地变量 环境变量的引入 main参数&#xff08;命令行参数&#xff09; 先来看看这样的代码以及运行结果&#xff1a; #include<stdio.h>#include<stdlib.h>#include<unistd.h>int…

【数据库】MySQL

文章目录 概述DDL数据库操作查询使用创建删除 表操作创建约束MySqL数据类型数值类型字符串类型日期类型 查询修改删除 DMLinsertupdatedelete DQL基本查询条件查询分组查询分组查询排序查询分页查询 多表设计一对多一对一多对多设计步骤 多表查询概述内连接外连接 子查询标量子…

【加密与解密(第四版)】第十七章笔记

第十八章 反跟踪技术 18.1 由BeginDebugged引发的蝴蝶效应 IsDebuggerPresent()函数读取当前进程PEB中的BeginDebugged标志 CheckRemoteDebuggerPresent() 反调试总结&#xff1a;https://bbs.kanxue.com/thread-225740.htm https://www.freebuf.com/articles/others-articl…

在生产试验铁地板有许多不足之处,是如何对不足来进行补救的?(北重厂家制造)

北重试验铁地板热处理&#xff1a;这个试验铁地板热处理的过程主要也分为三个步骤&#xff1a;正退火、退火、正火等&#xff0c;热处理主要的作用是为了改变铸件的原始组织&#xff0c;去掉铸件的内应力﹐使得产品的使用性能得到保证&#xff0c;以防铸件产生变形和破坏。 试验…

[数据结构1.0]计数排序

读者老爷好&#xff0c;本鼠鼠最近学了计数排序&#xff0c;浅浅介绍一下&#xff01; 目录 1.统计相同元素出现次数 2.根据统计的结果将序列回填到原来的序列中 3.相对映射计数排序 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用&#xff0c;是非比较排…

【MySQL】MySQL的安装和基本概念

MySQL的安装和基本概念 一、环境安装1、环境及配置2、下载安装 二、基本概念1、主流数据库2、mysql和mysqld的区别和概念&#xff08;1&#xff09;概念1&#xff1a;了解CS结构&#xff08;2&#xff09;概念2&#xff1a;数据库指的是什么&#xff08;3&#xff09;概念3&…

Vue——开发前的准备和创建一个vue的工程

文章目录 前言安装 Node js1、下载node.js2、安装node.js3、查看是否安装成功 创建 vue 工程Visual Studio Code 配置目录结构 前言 本篇博客主要讲解Vue开发前的环境配置与一些说明。 安装 Node js 环境需要安装配置一个nodejs 的环境。 vue3 最低nodejs 版本要求为 15.0 1…

Golang | Leetcode Golang题解之第107题二叉树的层序遍历II

题目&#xff1a; 题解&#xff1a; func levelOrderBottom(root *TreeNode) [][]int {levelOrder : [][]int{}if root nil {return levelOrder}queue : []*TreeNode{}queue append(queue, root)for len(queue) > 0 {level : []int{}size : len(queue)for i : 0; i < …

Springboot 开发 -- Thymeleaf页面嵌入帆软报表

一、后端代码 Slf4j Controller RequestMapping("/reprot") public class FineReportController {//帆软地址&#xff1a;finereport.urlhttp://localhost:8075/WebReport/ReportServer?reportletValue("${finereport.url}")private String finereportUr…

视频监控管理平台LntonCVS安防管理平台指挥交通应用方案

地铁作为城市交通的关键组成部分&#xff0c;承担着大量乘客流量&#xff0c;因此地铁视频监控系统的建设至关重要。这一系统不仅能够提升地铁运营的安全性&#xff0c;还能有效预防和处理突发事件&#xff0c;保障乘客的出行安全。 首先&#xff0c;地铁视频监控系统实现了对地…

vue3+ts实战

目录 一、ts语法练习 1.1、安装 1.2、语法 二、vue3ts 2.1、项目创建 2.1.1、项目创建(建议node版本在16.及以上) 2.1.2、下载路由、axios 2.1.3、引入element-plus 2.1.4、报错解决 (1)文件路径下有红色波浪 (2)组件名称下有红色波浪 (3)引入模块下有红色波浪 2.…

使用docker完整搭建前后端分离项目

1、docker的优势&#xff0c;为啥用docker 2、docker的核心概念 镜像【Image】- 只读模板 容器【Container】- 运行镜像的一个外壳&#xff0c;相当于一个独立的虚拟机 仓库【repository】- 镜像的管理工具&#xff0c;可公开&#xff0c;可私有&#xff1b;类似git仓库 3、c…