Kafka入门:从零开始了解分布式流处理平台

news2024/12/23 9:13:19

什么是Kafka

    Apache Kafka是由LinkedIn公司开发,后来由Apache软件基金会维护的一个分布式、分区、多副本的基于ZooKeeper协调的分布式消息系统。Kafka不仅是一个消息队列,还是一个强大的流处理平台,它能够实时地处理大量数据,满足各种复杂的数据处理需求。

Kafka的特性

高吞吐量:Kafka每秒可以处理几十万条消息,延迟低至毫秒。

高伸缩性:Kafka集群支持热扩展,能够动态地添加或移除节点,以满足业务增长的需求。

持久性与可靠性:消息被持久化到本地磁盘,并支持数据备份以防止数据丢失。

容错性:Kafka允许集群中节点失败,只要副本数量足够,系统仍然能够继续工作。

高并发:支持数千个客户端同时读写。

Kafka的应用场景

消息中间件:Kafka可以作为消息中间件,在微服务架构中实现服务的解耦和异步通信。

日志聚合:收集并处理来自不同系统的日志数据,进行实时分析或离线处理。

流处理:结合Kafka Streams或Spark Streaming等流处理引擎,实现实时数据的处理和转换。

事件驱动系统:通过事件驱动的方式,实现系统间的松耦合通信。

Kafka的核心组件

        Broker:Kafka节点被称为Broker,一个Kafka集群由多个Broker组成。每个Broker可以容纳多个Topic,Topic是Kafka中用于存储消息的逻辑单元,每个Topic又可以划分为多个Partition,以提高系统的并行处理能力和容错性。

        Topic:一个Topic可以看作是一个消息队列的集合,用于存储相同类型的消息。生产者向Topic发送消息,消费者从Topic读取消息。

        Partition:每个Topic由一个或多个Partition组成,每个Partition是一个有序的队列。Kafka通过Partition实现了负载均衡和数据分区,提高了系统的扩展性和吞吐量。Partition在物理上对应服务器上的一个目录,包含多个日志文件和索引文件。

        Producer:生产者,负责向Kafka集群发送消息。生产者可以指定消息的Key,Kafka会根据Key的哈希值将消息发送到指定的Partition中,以保证消息的有序性。

        Consumer:消费者,负责从Kafka集群读取消息。消费者可以加入一个或多个Consumer Group,一个Consumer Group内的消费者共同消费同一个Topic的不同Partition,以保证消息只被消费一次。

        Replica与Leader/Follower:为了保证数据的高可靠性和容错性,Kafka为每个Partition设置了多个副本(Replica)。副本之间通过ZooKeeper进行协调,其中有一个副本被选为Leader,负责处理所有的读写请求;其余的副本作为Follower,实时从Leader同步数据。当Leader宕机时,Kafka会自动从Follower中选举出新的Leader,以保证系统的可用性。

        ZooKeeper:是Kafka的元数据管理器,负责维护Kafka集群的元数据信息,如Broker信息、Topic信息、Partition信息等。Kafka通过ZooKeeper来实现Broker的注册与发现、Partition的Leader选举等功能。

Kafka的工作原理

消息发送

        当生产者发送消息到Kafka时,首先会根据消息的Key和Topic的Partition数进行哈希计算,以确定消息应该被发送到哪个Partition中。然后,生产者将消息发送到该Partition的Leader副本中,Leader副本在确认消息已被成功写入本地磁盘后,将消息同步给Follower副本。

消息消费

        消费者通过订阅一个或多个Topic来读取消息。消费者可以指定一个Consumer Group来区分不同的消费逻辑。在Consumer Group中,每个Partition只能被一个消费者消费,以保证消息的顺序性和消费的唯一性。消费者通过向Kafka发送心跳来维护自己的在线状态,并在发生故障时重新加入Consumer Group以继续消费消息。

容错与恢复

        Kafka通过多副本机制来保证数据的可靠性和容错性。当Leader副本发生故障时,Kafka会自动从Follower副本中选举出新的Leader副本,以保证系统的可用性。同时,Kafka还提供了消息重试机制,当消息发送或消费失败时,可以自动进行重试,直到消息成功处理为止。

Kafka的高级特性

消息持久化与日志压缩

        Kafka通过将消息持久化到磁盘来确保数据的安全性和可靠性。每条消息在被写入Partition时,都会被分配一个唯一的偏移量(Offset),以便后续消费时能够定位到具体的位置。此外,Kafka还提供了日志压缩功能,该功能允许Kafka在保留关键数据的同时,删除旧的和不重要的数据,以节省存储空间。

消息排序

        Kafka保证了同一个Partition内的消息是有序的,这是通过将消息追加到Partition的末尾来实现的。因此,当消费者按照Offset的顺序读取消息时,就可以保证消息的顺序性。然而,需要注意的是,不同Partition之间的消息是无序的。

消息广播与组播

        Kafka支持消息的广播和组播模式。在广播模式下,消息会被发送到订阅了该Topic的所有消费者。而在组播模式下,消息只会被发送到同一个Consumer Group中的一个消费者,从而实现消息的负载均衡和去重。

应用场景拓展

实时流处理

        Kafka结合Kafka Streams或Apache Flink等流处理引擎,可以实现实时数据的处理和分析。通过将Kafka作为数据源和消息中间件,流处理引擎可以实时地读取Kafka中的消息,进行复杂的数据处理和转换,并将结果输出到下游系统。

微服务架构中的解耦

        在微服务架构中,Kafka可以作为服务间的消息队列,实现服务间的解耦和异步通信。生产者服务将消息发送到Kafka中,消费者服务从Kafka中读取消息并进行处理。这种方式不仅降低了服务间的耦合度,还提高了系统的可扩展性和容错性。

数据管道

        Kafka可以作为数据管道的一部分,用于从各种数据源收集数据,并将数据传递到下游的数据处理系统或存储系统。通过Kafka的分布式和高可靠性特性,可以确保数据在传输过程中的安全性和可靠性。

事件驱动架构

        Kafka支持事件驱动架构的实现。在事件驱动架构中,系统通过监听和响应事件来触发业务逻辑的执行。Kafka作为事件的总线,可以接收来自不同系统的事件消息,并将这些事件消息分发给订阅了相应事件的消费者进行处理。

总结

        Apache Kafka作为一款高性能、高可靠性的分布式消息引擎系统和流处理平台,在大数据和分布式系统中扮演着重要的角色。通过深入了解Kafka的基本原理、架构、核心组件及其应用场景,我们可以更好地利用Kafka来构建高效、可扩展的数据处理系统。

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

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

相关文章

Springboot如何实现redis消息的订阅发布

1. 环境准备 确保你已经安装了 Redis 服务器,并且可以在本地或者远程访问它。如果你还没有安装 Redis,请先安装并启动 Redis 服务。 2. 创建 Spring Boot 项目 使用 Spring Initializr 或者其他 IDE 创建一个新的 Spring Boot 项目,并添加以下…

Leetcode 1047-删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 题解 题目链接 //先进后出&a…

cubeide Target is not responding, retrying... 或基于vscode方式等 无法调试

点击调试输出如图: 基于cubeidet开发环境,debug后输出: 基于vscode开发环境: OpenOCD: GDB Server Quit Unexpectedly. See gdb-server output in TERMINAL tab for more details. 解决方法: 这里的调试选择一个&…

Vue3源码调试-第二篇

前言 上篇我们见到一个很厉害的方法,这篇我们来看看 baseCreateRenderer 首先,方法太多了,我也不一个一个数有多少个了,因为我们着重使用createApp方法,那么我们就跟着代码走,用到哪个方法就分析哪个方法…

vue的for循环不建议用index作为key

我们页面总有一些相似的,我们想用循环渲染,根据对象数组结构进行渲染,这是不是很熟悉的场景。这时候我们需要有一个唯一的key绑定在循环渲染的元素上,一般情况下我们会用id,因为id是唯一的。然而有些页面要循环的数据&…

python 把一个视频复制3次

1. 先看效果 输入 输出 2. 代码 第一种方法 moviepy 代码来源 gpt4o from moviepy.editor import VideoFileClip, clips_array# 加载视频 video VideoFileClip("a22.mp4")# 复制视频三次 video_copied clips_array([[video, video, video]])# 输出最终的视频 vi…

关于tresos Studio(EB)的MCAL配置之ADC

General Adc_DeInit API 使能Adc_DeInit接口 Adc Development Error Detection 开发者错误检测 Adc Enable Limit Check边界检测 Adc Queue启用队列,如果AdcPriorityImplementationADC_PRIORITY_HW_SW执行优先级为硬件则一定要开启队列 Adc_StartStopGroup API使…

XSS LABS - Level 14 过关思路

关注这个靶场的其他相关笔记:XSS - LABS —— 靶场笔记合集-CSDN博客 0x01:关卡配置 这一关有些特殊,需要链接到外部站点,但是这个站点已经挂了,无法访问: 所以笔者就根据网上的资料,对这一关进…

ARM体系结构和接口技术(十一)定时器中断实验

文章目录 一、实验分析二、RCC章节:找到外设基地址并使能外设控制器时钟源1. RCC2. GICC和GICD3. TIM3 三、TIM3章节(一)CR1寄存器(二)DIER寄存器(三)SR寄存器(四)PSC寄存…

JS中this的指向问题、JS的执行机制、offset、client、scroll

JS中this的指向问题 1. 在全局环境下 在全局环境中(在浏览器中是 window 对象,在Node.js中是 global 对象),this 指向全局对象。 console.log(this window); // 在浏览器中为 true console.log(this.document ! undefined); //…

基于ssm+vue+uniapp的农业电商服务系统小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

代码随想录算法训练营第四十一天 | 121. 买卖股票的最佳时机 , 122.买卖股票的最佳时机II , 123.买卖股票的最佳时机III

目录 121. 买卖股票的最佳时机 思路 暴力 贪心 动态规划 1.确定dp数组(dp table)以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 方法一: 贪心 方法二:动态规划1 方法三&#xf…

使用rqt_console和roslaunch

1.使用rqt_console和rqt_logger_level rosrun rqt_console rqt_console 执行完该命令后有如下界面: 继续执行如下命令: rosrun rqt_logger_level rqt_logger_level 此时有如下新界面: 接下来继续运行如下命令: rosrun turtlesim turtlesim_node 上面第一…

慢sql问题解决,sql优化,数据库(mysql)

文章目录 1、count效率比较2、作者遇到的慢sql问题2.1、使用排序导致变慢问题2.2、使用LEFT JOIN 导致索引失效的问题2.3、子查询导致索引失效 3、explain命令介绍4、阿里云rds数据库(mysql的一种)主键索引查询很慢问题参考文档 1、count效率比较 所以结…

初识C++(8.27)

用C实现: 提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数. #include <iostream> #include <string>using namespace std;int main() {string str;cout << "请输入一个字符串: ";getline(cin, str…

uni-app - - - - - 使用uview-plus详细步骤

uni-app - - - - - 使用uview-plus详细步骤 1. 使用HbuilderX创建空白项目2. 安装插件3. uview-plus配置使用3.1 main.js配置3.2 uni.scss配置3.3 App.vue配置3.4 pages.json 4. 重启Hbuilderx 1. 使用HbuilderX创建空白项目 2. 安装插件 工具 > 插件安装 > 前往插件市场…

用Python探究两组变量的相关性_典型相关分析(CCA)模板

典型相关分析&#xff08;Canonical Correlation Analysis, CCA&#xff09;是一种多变量统计分析方法&#xff0c;用于研究两组变量之间的整体相关性。它的基本原理是在两组变量中分别提取有代表性的两个综合变量&#xff08;即两组变量的线性组合&#xff09;&#xff0c;通过…

Java设计模式之工厂模式详细讲解和案例示范

在Java的设计模式中&#xff0c;工厂模式&#xff08;Factory Pattern&#xff09;是最常见和最有用的一种创建型模式。工厂模式的核心思想是将对象的创建与使用分离&#xff0c;从而提供了一种灵活的方式来创建不同类型的对象。这种模式尤其适用于复杂对象的创建过程&#xff…

HTTrack镜像网站实践

目录 前言 Windows下使用HTTrack HTTrack安装 HTTrack使用 Kali linux下使用HTTrack HTTrack安装 HTTrack使用 前言 在特殊时期&#xff0c;不想把真实的网站页面展示给用户&#xff0c;但又不能关停。此刻&#xff0c;可以用镜像网站替换真实网站&#xff0c;降低安全风…

Golang | Leetcode Golang题解之第378题有序矩阵中第K小的元素

题目&#xff1a; 题解&#xff1a; func kthSmallest(matrix [][]int, k int) int {n : len(matrix)left, right : matrix[0][0], matrix[n-1][n-1]for left < right {mid : left (right - left) / 2if check(matrix, mid, k, n) {right mid} else {left mid 1}}retur…