Kafka的基本概念及其关键原理

Apache Kafka是一种分布式事件存储和流处理平台。该项目旨在提供一个统一的、高吞吐量、低延迟的平台,用于处理实时数据流。

71ec5dabf146b4ba3f08516b5eef3b0c.png

•Kafka可以通过Kafka Connect连接到外部系统(用于数据导入/导出),并提供Kafka Streams库用于流处理应用程序。•它有许多用例,包括分布式日志记录、流处理、数据集成和发布/订阅消息传递。•Kafka是一个数据流系统,允许开发人员实时响应新事件的发生。•Kafka的架构由存储层和计算层组成。存储层旨在高效存储数据,并且是一个分布式系统,如果存储需求随时间增长,可以轻松地扩展系统以适应增长。

计算层由四个核心组件组成:

1.生产者(Producer)2.消费者(Consumer)3.流处理(Streams)4.连接器(Connectors)API,使得Kafka可以在分布式系统中扩展应用程序。

1. 生产者和消费者API: Kafka强大的应用程序层的基础是用于访问存储的两个基本API,即用于写入事件的生产者API和用于读取事件的消费者API。在这两个API之上构建了用于集成和处理的API。

2. Kafka Connect: Kafka Connect建立在生产者和消费者API之上,提供了一种将数据在Kafka和外部系统之间集成的简单方法。源连接器从外部系统中获取数据并将其发送到Kafka主题。接收器连接器从Kafka主题获取数据并将其写入外部系统。

3. Kafka Streams: 用于处理到达的事件的Kafka Streams是一个Java库,建立在生产者和消费者API之上。Kafka Streams允许您执行实时流处理、强大的转换和事件数据的聚合。

基本概念

消息(Message)

•消息是信息的记录。每条消息都有一个可选的键,用于将消息路由到适当的分区,以及必需的值,即实际的信息。消息的键和值都是字节数组。

Kafka主题(Kafka Topics)

f61308898ac8c3e17e09069e54c5db2e.png

•主题是事件的日志。•Apache Kafka的最基本的组织单元是主题,类似于关系数据库中的表。•您可以创建不同的主题来保存不同类型的事件,并创建不同的主题来保存过滤和转换后的同一类型的事件。

重要属性:

•首先,它们是追加写入的:当您将新消息写入日志时,它总是追加到末尾。•其次,它们只能通过在日志中寻找任意偏移量来进行读取,然后按顺序扫描日志条目进行读取。•第三,日志中的事件是不可变的 - 一旦某件事发生,几乎不可能撤消它。•日志本质上也是持久的。传统的企业消息系统具有主题和队列,用于临时存储消息以在源和目标之间进行缓冲。•每个主题可以配置为在达到一定年龄后过期数据。

Kafka分区(Kafka Partitioning)

da850dc3cbc9661ff155700e65e92885.png

•为了在主题中分布事件的存储和处理,Kafka使用分区的概念。一个主题由一个或多个分区组成,这些分区可以存在于Kafka集群中的不同节点上。•分区是Kafka事件的主要存储单元,尽管在分层存储(Tiered Storage)中,一些事件存储被移出了分区。•分区也是并行处理的主要单元。可以通过同时写入多

个分区来并行地将事件写入主题。

•同样,消费者可以通过每个消费者实例从不同的分区读取,将其工作负载分散开来。如果只使用一个分区,只能有效地使用一个消费者实例。

分区工作原理:

•将主题分割为分区后,我们需要一种方法来决定将消息写入哪个分区。通常情况下,如果消息没有键,则后续消息将循环分布在主题的所有分区中。•例如,如果您正在生成与同一客户关联的所有事件,使用客户ID作为键可以确保来自给定客户的所有事件始终按顺序到达。

Kafka Broker

•从物理基础设施的角度来看,Apache Kafka由一组称为Broker的机器网络组成。•它们是独立的机器,每台机器上运行一个Kafka broker进程。•每个Broker托管一些分区并处理将新事件写入这些分区或从这些分区读取事件的传入请求。Broker还处理分区之间的复制。

集群(Cluster)

•Broker作为集群的一部分运行,共享负载并提供容错能力。

偏移量(Offset)

•每条消息通过主题、所属分区和偏移量号唯一标识。偏移量是一个不断递增的整数,以唯一地标识消息在给定主题和分区中。在分区内,消息按偏移量号进行排序。

复制(Replication)

797074aaac57cba14d388e005d14d55a.png

•数据复制是Kafka的一个关键功能,它使得Kafka能够提供高持久性和可用性。我们可以在主题级别启用复制。•创建新主题时,可以指定复制因子,然后该主题的每个分区将被多次复制。•这个数字被称为复制因子。使用复制因子N,通常情况下,我们可以容忍N-1个故障,而不会丢失数据,并保持可用性。•每次读写到分区时,都经过主分区(leader)。•只有当所有同步副本将消息写入其预写日志时,消息才被视为已提交。•生产者可以单独配置确认策略。

Kafka生产者(Producers)

•生产者库的API界面相当轻量级:在Java中,有一个称为KafkaProducer的类,您可以使用它连接到集群。•从表面上看,这是与生产消息有关的所有API界面。在幕后,该库管理连接池、网络缓冲区、等待代理确认消息、在必要时重新传输消息等一系列细节,应用程序程序员不需要关心这些细节。

消费者(Consumers)

•使用消费者API与生产者类似。您使用一个称为KafkaConsumer的类来连接到集群。•首先,Kafka与传统消息队列不同之处在于读取消息不会将其销毁;•实际上,在Kafka中,许多消费者从一个主题中读取是很正常的。

Kafka Connect

•一方面,Kafka Connect是一种可插拔连接器的生态系统,另一方面,它是一个客户端应用程序。作为客户端应用程序,Connect是一个在与Kafka brokers独立的硬件上运行的服务器进程。

Kafka Streams

•Kafka Streams是一个Java API,为您提供了对流处理的所有计算原语的便捷访问:过滤、分组、聚合、连接等,使您不必在消费者API之上编写框架代码来执行所有这些操作。•它还提供对由流处理计算产生的可能大量的状态的支持。

e6335a85b91fc529706750589964d921.png

流处理中的事件?

•事件是发生的事情的记录,同时提供有关发生的事情的信息。事件的示例包括客户订单、付款、网站上的点击或传感器读数。•事件记录由时间戳、键、值和可选的标头组成。事件有效负载通常存储在值中,键是可选的。

Kafka持久性

•发布的每批消息都存储在分区的活动日志段中,其格式与生产者发布的格式完全相同。消息格式在生产者、消费者和代理之间保持一致,消除了序列化和反序列化的开销。•Kafka使用页面缓存进行读写。所有读取将直接从页面缓存中进行,写入首先应用于页面缓存,然后定期同步。

日志压缩

•Kafka主题的保留策略可以配置为“压缩”或“删除”。删除根据日志保留字节或日志保留时间段清除旧的段文件。•如果将保留策略配置为压缩,Kafka只会保留每个消息键的最新消息。如果

我们正在获取与给定键相关的许多更新,并且只对最新消息感兴趣,这将非常有用。例如,用户更新事件。

领导者选举

•当代理崩溃时,它无法向Zookeeper发送心跳。Zookeeper的会话超时,然后通知集群控制器代理故障的情况。集群控制器获取代理是领导者的所有分区,并选择ISR中的下一个条目并将其提升为领导者。

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

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

相关文章

回溯算法组合问题之77组合

题目: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 题目链接:77. 组合 - 力扣(LeetCode) 示例: 解法: 回溯法三部曲: &a…

简易评分系统

目录 一、实验目的 二、操作环境 三、实验内容和过程 1.实验内容 2.代码 2.1 用户验证功能 2.2 菜单函数 2.3 评分功能 四、结果分析 总体的输出结果: 保存文件成功截图: 五、小结 一、实验目的 1.巩固和提高学生学过的基础理论和专业知识&am…

55 # 实现可写流

先在 LinkedList.js 给链表添加一个移除方法 class Node {constructor(element, next) {this.element element;this.next next;} }class LinkedList {constructor() {this.head null; // 链表的头this.size 0; // 链表长度}// 可以直接在尾部添加内容,或者根据…

java贪心算法案例

1.零钱找回问题 这个问题在我们的日常生活中就更加普遍了。假设1元、2元、5元、10元、20元、50元、100元的纸币分别有c0, c1, c2, c3, c4, c5, c6张。现在要用这些钱来支付K元,至少要用多少张纸币?用贪心算法的思想,很显然,每一步…

计算机网络 day7 扫描IP脚本 - 路由器 - ping某网址的过程

目录 network 和 NetworkManager关系: 实验:编写一个扫描脚本,知道本局域网里哪些ip在使用,哪些没有使用? 使用的ip对应的mac地址都要显示出来 计算机程序执行的两种不同方式: shell语言编写扫描脚本 …

漏洞攻击 --- TCP -- 半开攻击、RST攻击

TCP半开攻击(半连接攻击) --- syn攻击 (1)定义: sys 攻击数据是DOS攻击的一种,利用TCP协议缺陷,发送大量的半连接请求,耗费CPU和内存资源,发生在TCP三次握手中。 A向B…

为什么ConcurrentHashMap不允许插入null值而HashMap可以?

为什么ConcurrentHashMap不允许插入null值而HashMap可以? 文章目录 为什么ConcurrentHashMap不允许插入null值而HashMap可以?HashMap源码ConcurrentHashMap源码为什么ConcurrentHashMap需要加空值校验呢?二义性问题测试代码代码分析测试结果结…

LangChain + Embedding + Chromdb,关联使用ChatGLM的本地搭建训练平台教程

一.介绍 OpenAI 在国内用户注册会遇到各种阻力,目前可行的方法是使用本地数据集的功能实现联网搜索并给出回答,提炼出TXT、WORD 文档里的内容。 现在主流的技术是基于强大的第三方开源库:LangChain 。 文档地址:🦜…

win11安装redis步骤详解

文章目录 一、redis的安装与下载1、下载2、解压3、启动redis4、测试是否安装成功 二、将redis加入到windows的服务中三、常用的redis服务命令 安装可参考的资料:https://www.runoob.com/redis/redis-install.html 一、redis的安装与下载 1、下载 下载地址&#xf…

提示工程师:如何写好Prompt

提示工程由来 提示工程是一门相对较新的学科,用于开发和优化提示以有效地将语言模型 (LM) 用于各种应用程序和研究主题。 研究人员使用提示工程来提高 LLM 在广泛的常见和复杂任务(例如问题回答和算术推理)上的能力。 开发人员使用提示工程…

120、仿真-51单片机温湿度光照强度C02 LCD1602 报警设计(Proteus仿真+程序+元器件清单等)

方案选择 单片机的选择 方案一:STM32系列单片机控制,该型号单片机为LQFP44封装,内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ,在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节…

【Docker】Docker安装与操作

docker的安装与命令 一、安装 docker1. 安装依赖包2. 信息查看 二、Docker 镜像操作1. 搜索镜像2. 获取镜像3. 镜像加速下载4. 查看镜像相关信息5. 删除镜像6. 上传镜像7. 存出和载入镜像 三、Docker 容器操作1. 创建容器2. 查看容器3. 启动容器4. 停止容器5. 进入容器6. 容器与…

SpringBoot整合SpringCloudStream3.1+版本Kafka

SpringBoot整合SpringCloudStream3.1版本Kafka 下一节直通车 SpringBoot整合SpringCloudStream3.1版本的Kafka死信队列 为什么用SpringCloudStream3.1 Springcloud架构提供,基于spring生态能够快速切换市面上常见的MQ产品3.1后使用配置文件的形式定义channel&am…

# Linux下替换删除文件中的颜色等控制字符的方法

Linux下替换删除文件中的颜色等控制字符的方法 文章目录 Linux下替换删除文件中的颜色等控制字符的方法1 Linux下的控制字符(显示的文字并不是他本身):2 颜色字符范例:3 替换4 最后 我们在shell编程显示输出时,会定义文…

Linux的时间函数

2023年7月19日,周三下午 我今天基于GitHub搭建了自己的博客网站,欢迎大家来我的个人博客网站阅读我的博客 巨龙之路的GitHub个人博客 (julongzhilu.github.io) 目录 time函数原型使用方法ctime函数原型使用方法疑惑gmtime、 localtime函数原型什么是分…

WEB:FlatScience

背景知识 sql注入 SQLite数据库知识 SQLite3注入方法 题目 用dirsearch进行扫描,下面几个关键目录:robots.txt,login.php,admin.php,剩下的目录就是一些pdf格式的论文了 一个一个访问并查看源代码,在查看l…

常用API学习06(Java)

Biglnteger public BigInteger(int num, Random rnd) 获取随机大整数,范围:[0~2的num次方-1] public BigInteger(String val) 获取指定的大整数 public BigInteger(String val, int radix) 获取指定进制的大整数 public static BigInteg…

怎么给pdf文件加密?pdf文档如何加密

在数字化时代,保护个人和机密信息的重要性越来越受到关注。PDF(Portable Document Format)是一种广泛使用的文件格式,用于共享和存储各种类型的文档。然而,由于其易于编辑和复制的特性,保护PDF文件中的敏感…

一张表实现短视频“评论区“完整功能

前言 现如今,不管是哪种类型的应用,评论区都少不了。从工具类的到媒体信息流类的,评论留言都是最基本的互动环节。比如抖音短视频下,针对视频每个用户都可以发表自己的观点;而针对用户的评论,其他的用户又可…

Spring Cloud—GateWay之限流

RequestRateLimiter RequestRateLimiter GatewayFilter 工厂使用 RateLimiter 实现来确定是否允许当前请求继续进行。如果不允许,就会返回 HTTP 429 - Too Many Requests(默认)的状态。 这个过滤器需要一个可选的 keyResolver 参数和特定于…