您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

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

时间:2023-07-18 13:44:49  来源:小技术君  作者:

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

•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)

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

重要属性:

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

Kafka分区(Kafka Partitioning)

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

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

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

分区工作原理:

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

Kafka Broker

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

集群(Cluster)

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

偏移量(Offset)

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

复制(Replication)

•数据复制是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之上编写框架代码来执行所有这些操作。•它还提供对由流处理计算产生的可能大量的状态的支持。

流处理中的事件?

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

Kafka持久性

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

日志压缩

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

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

领导者选举

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



Tags:Kafka   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  Search: Kafka  点击:(84)  评论:(0)  加入收藏
如何使用Python、Apache Kafka和云平台构建健壮的实时数据管道
译者 | 李睿审校 | 重楼在当今竞争激烈的市场环境中,为了生存和发展,企业必须能够实时收集、处理和响应数据。无论是检测欺诈、个性化用户体验还是监控系统,现在都需要接近即时...【详细内容】
2024-01-26  Search: Kafka  点击:(46)  评论:(0)  加入收藏
深入浅出Kafka:高可用、顺序消费及幂等性
在我们旅行于数据海洋的途中,如果把 Kafka 比作是一艘承载无数信息航行的快船,前文《Kafka实战漫谈:大数据领域的不败王者》已经讲述了如何搭建起这艘快船,让它在起风的早晨开始...【详细内容】
2023-12-18  Search: Kafka  点击:(173)  评论:(0)  加入收藏
7k Star,一款开源的 Kafka 管理平台,功能齐全、页面美观!
Apache Kafka UI 是一个免费的开源 Web UI,用于监控和管理 Apache Kafka 集群,可方便地查看 Kafka Brokers、Topics、消息、Consumer 等情况,支持多集群管理、性能监控、访问控...【详细内容】
2023-12-15  Search: Kafka  点击:(129)  评论:(0)  加入收藏
利用Apache Kafka、Flink和Druid构建实时数据架构
译者 | 陈峻审校 | 重楼如今,对于使用批处理工作流程的数据团队而言,要满足业务的实时要求并非易事。从数据的交付、处理到分析,整个批处理工作流往往需要大量的等待,其中包括:等...【详细内容】
2023-12-11  Search: Kafka  点击:(228)  评论:(0)  加入收藏
运维兄弟!Kafka怎么又"超时"了?
现象凌晨,当运维刚躺下,就被业务研发的电话叫醒,"哥们!kafka服务又异常了?影响到业务了,快看看",业务研发给出的异常日志如下:基本分析 集群检查:立即确认kafka集群以及涉及到topic健...【详细内容】
2023-12-07  Search: Kafka  点击:(137)  评论:(0)  加入收藏
图解Kafka适用场景,全网最全!
消息系统消息系统被用于各种场景,如解耦数据生产者,缓存未处理的消息。Kafka 可作为传统的消息系统的替代者,与传统消息系统相比,kafka有更好的吞吐量、更好的可用性,这有利于处...【详细内容】
2023-11-29  Search: Kafka  点击:(183)  评论:(0)  加入收藏
Kafka有哪些应用场景?你能说上来几个?
下面我们来总结一下Kafka的一些应用场景:1、日志处理与分析(最常用的场景)下图显示了典型的 ELK(Elastic-Logstash-Kibana)堆栈。Kafka 有效地从每个实例收集日志流。ElasticSe...【详细内容】
2023-11-28  Search: Kafka  点击:(163)  评论:(0)  加入收藏
Kafka:解锁大数据时代的搜索与分析
在当今大数据时代,数据湖作为一种新兴的数据存储和分析解决方案,正受到越来越多企业的青睐。而作为一种高性能、可扩展的事件流平台,Kafka在数据湖领域发挥着重要的作用。本文...【详细内容】
2023-11-24  Search: Kafka  点击:(287)  评论:(0)  加入收藏
解密Kafka主题的分区策略:提升实时数据处理的关键
Kafka几乎是当今时代背景下数据管道的首选,无论你是做后端开发、还是大数据开发,对它可能都不陌生。开源软件Kafka的应用越来越广泛。面对Kafka的普及和学习热潮,哪吒想分享一...【详细内容】
2023-11-21  Search: Kafka  点击:(180)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(5)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(11)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(6)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(10)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(115)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(115)  评论:(0)  加入收藏
站内最新
站内热门
站内头条