kafka集群架构与原理

news2024/11/17 9:44:40

前言

        这次我们从消息队列开始讨论。生产者-消费者模型中间需要一个消息队列,以存储生产者的产品。对传统的消息队列来说,它支持点对点(P2P)和发布/订阅(Pub/Sub)两种消息模型。在点对点模型中,消息被发送到一个队列,并且只有一个消费者可以消费该消息。在发布/订阅模型中,消息被发布到一个主题,可以有多个订阅者消费。通常将消息存储在内存或数据库中,可能不具备持久化或只有有限的持久化能力。消息队列能够达到生产者与消费者服务解耦的效果。

        而kafka是一种消息队列系统。主要使用发布/订阅模型,但通过消费者组(Consumer Group)的概念,也可以实现类似点对点的消息消费模式。在 Kafka 中,同一个消费者组内的消费者会协调消费同一个分区的消息,确保每个消息在组内只被消费一次。设计用于持久化消息到磁盘,支持10万级高吞吐量的数据写入,并且可以配置消息的保留策略。此外,Kafka还支持异步处理,这是它能够实现高吞吐量和高性能的关键特性之一。

集群架构

        Kafka 集群是由多个 Kafka 服务器(称为 Broker)组成的分布式系统,它们共同提供高吞吐量、可扩展性和容错性的消息处理能力。以下是 Kafka 集群的一些关键特点和组成部分:

  • Broker:Kafka 集群由多个 Broker 组成,每个 Broker 是一个独立的 Kafka 服务器实例。Broker 负责维护数据和处理客户端的请求。
  • Topic:Kafka 中的消息分类称为 Topic。一个 Topic 可以分布在多个 Broker 上,以实现数据的分布式存储。
  • PartitionTopic 被分割成多个 Partition,每个 Partition 是一个有序的消息队列。Partition 可以在不同的 Broker 之间进行分配,以实现负载均衡和并行处理
  • Replication:为了提高数据的可靠性,每个 Partition 都有多个副本(Replica)。其中一个副本是领导者(Leader),负责处理所有的读写请求。其他副本是追随者(Follower),负责复制领导者的数据。
  • Leader Election:如果领导者副本失败,Kafka 会从追随者中选举出一个新的领导者。
  • Producer:生产者是向 Kafka 集群发送消息的客户端。生产者可以将消息发送到特定的 Topic 和 Partition。
  • Consumer:消费者是从 Kafka 集群读取消息的客户端。消费者可以属于一个消费者组(Consumer Group),消费者组内的消费者可以协调消费同一个 Partition 的消息。
  • Consumer Group:消费者组是一组消费者,它们共享订阅的 Topic。Kafka 保证每个消息只被消费者组内的某个消费者消费。所有的消费者都属于某个消费者组。
  • Offset:每个消息在 Partition 中都有一个唯一的 Offset,消费者使用 Offset 来跟踪它们在 Partition 中的位置。不同的Partition中的Offset是独立的,消费者组中的每个消费者都会实时记录自己消费到了哪个Offset,以便出错恢复时从上一个位置继续消费。

原理

工作流程

        Kafka 中消息是以 Topic 进行分类的,生产者生产消息,消费者消费消息,面向的都是同一个 Topic 。 Topic 是逻辑上的概念,而 Partition 是物理上的概念, 每个 Partition 对应于一个 log 文件 ,该 log 文件中存储的就是 Producer 生产的数据。 Producer 生产的数据会不断追加到该 log 文件末端,且每条数据都有自己的 Offset 。 消费者组中的每个消费者,都会实时记录自己消费到了哪个 Offset ,以便出错恢复时,从上次的位置继续消费。

副本原理

         数据只会写入Leader副本,其他副本从Leader副本拉取数据。而消费者读取数据也只会从Leader副本读。Kafka 集群设计了高可用性,即使部分 Broker 失败,集群仍然可以继续处理消息。集群可以通过添加更多的 Broker 来水平扩展,以处理更多的数据和请求。通过副本机制提供容错能力,即使某些 Broker 失败,数据也不会丢失。对于Ledaer的分配,拿TopicA来举例,TopicA分成了两个Partition,如果将其Leader设置在同一个broker上,当这个broker宕机,其他的机器就要选两个新Leader,但是如果将同一Topic的不同Partition的Leader设置在不同的broker,这样即使一个broker宕机也只会重新选一个新Ledaer。所以Ledaer应该尽量分布均匀。

  • 在 Kafka 中,副本分成两类:领导者副本(Leader Replica)和追随者副本(FollowerReplica)。每个分区在创建时都要选举一个副本,称为领导者副本,其余的副本自动称为追随者副本。
  • Kafka 副本机制中的追随者副本是不对外提供服务的,不同于FastdfsMongdoDB等。
  • 当领导者副本挂掉了,或领导者副本所在的 Broker 宕机时,Kafka 依托于 ZooKeeper 提供的监控 功能能够实时感知到,并立即开启新一轮的领导者选举,从追随者副本中选一个作为新的领导者。老 Leader 副本重启回来后,只能作为追随者副本加入到集群中。

水平扩展

        kafka得消息组织方式是主题 - 分区 - 消息。主题下的每条消息只会保存在某一个分区中,而不会在多个分区中被保存多份。分区的作用主要提供负载均衡的能力,能够实现系统的高伸缩性(Scalability)。不同的分区能够被放置到不同节点的机器上,而数据的读写操作也都是针对分区这个粒度而进行的,这样每个节点的机器都能独立地执行各自分区的读写请求处理。这样,当性能不足的时候可以通过添加新的节点机器来增加整体。(特别注意:副本与分区的区别)

分区策略

        Kafka 提供了默认的分区策略,同时也支持你自定义分区策略。 它允许 Kafka 在集群环境中实现数据的分布式存储和并行处理。
  • 轮询策略:最简单的分区策略,Kafka 会按照顺序将消息轮流分配到各个分区上。
  • 随机策略:Kafka 会随机地将消息分配到任意一个分区上。
  • 基于键的分区策略:如果消息带有键(Key),Kafka 会使用这个键来确定消息应该发送到哪个分区。通常,键的哈希值会被用来确定分区号。

数据可靠性保证

        为保证 Producer 发送的数据,能可靠地发送到指定的 Topic Topic 的每个 Partition 收到 Producer发送的数据后,都需要向 Producer 发送 ACK ACKnowledge 确认收到)。如果 Producer 收到 ACK ,就会进行下一轮的发送,否则重新发送数据。

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

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

相关文章

【楚怡杯】职业院校技能大赛 “云计算应用” 赛项样题九

某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenStack搭建企业内部私有云平台,开源Kubernetes搭建云原生服务平台,选…

基于姿态估计算法的健身辅助应用

作为一名健身爱好者,我一直对探索改善锻炼习惯的方法很感兴趣。一个一直让我着迷的领域是使用计算机视觉和机器学习来分析和纠正锻炼过程中的姿势。在本文中,我将分享我使用姿势估计算法构建一个简单的健身房训练辅助应用程序的历程。 NSDT工具推荐&…

Qt实现自定义的文件对话框CustomFileDialog

背景: 最近客户有需求说Qt自带的文件对话框在windows上打开网络共享文件的时候比较卡,需要解决这个问题,于是参考Qt源码,自定义了一个文件对话框。已经实现流畅加载网络共享文件夹了。效果如下,所有的代码都可以直接修…

ComfyUI中缺失节点安装一点小小注意事项

加载工作流,遇到了红当当的缺失节点警告窗口: 在ComfyUI-Manager点击安装缺失节点,发现竟然弹出4个,而上面告警窗口中只是缺失3个,究竟是怎么回事呢,刚开始接触ComfyUI时,我也是不管3721&#x…

echarts 导出pdf空白原因

问题阐述 页面样式: 导出pdf: 导出pdf,统计图部分为空白。 问题原因 由于代码中进行了dom字符串的复制,而echarts用canvas绘制,canvas内部内容不会进行复制,只会复制canvas节点,因此导出pdf空白。 解决…

卷轴模式开发的技术架构分析与源代码展示

在软件开发中,"卷轴模式"(虽然不是一个广泛认知的术语,在此我们可以理解为一种类似于游戏或应用中内容逐步加载与展示的模式,类似于古代卷轴展开的方式)通常用于处理大量数据或内容,特别是当这些…

人工智能与自然语言处理发展史

前言 在科技的浪潮中,人工智能 (AI) 作为一股不可阻挡的力量,持续推动着社会与科技的进步。本博客旨在深入剖析人工智能及其核心领域——神经网络、自然语言处理、统计语言模型、以及大规模语言模型——的演进历程,以专业的视角展现这一领域…

网站建设中常见的网站后台开发语言有哪几种,各自优缺点都是什么?

市场上常见的网站后台开发语言有PHP、Python、JavaScript、Ruby、Java和.NET等。这些语言各有其独特的优缺点,适用于不同的开发场景和需求。以下是对这些语言的具体介绍: PHP 优点:PHP是一种广泛用于Web开发的动态脚本语言,特别适…

828华为云征文|华为云Flexus云服务器X实例Windows系统部署一键短视频生成AI工具moneyprinter

在追求创新与效率并重的今天,我们公司迎难而上,决定自主搭建一款短视频生成AI工具——MoneyPrinter,旨在为市场带来前所未有的创意风暴。面对服务器选择的难题,我们经过深思熟虑与多方比较,最终将信任票投给了华为云Fl…

使用vite+react+ts+Ant Design开发后台管理项目(四)

前言 本文将引导开发者从零基础开始,运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术…

将Pytorch环境打包,快速部署到另一台机器上(在没有网络,或者网络环境不好的情况下推荐使用)

打包PyTorch环境 当您需要在不同的机器上快速部署包含PyTorch的Python环境时,使用conda-pack是一个很好的选择。conda-pack可以打包一个完整的Conda环境,包括所有已安装的包和依赖项,使其能够轻松地在其他机器上还原。 步骤一:…

Django 对数据库的增删改查

新增 使用方法:类模型.objects.create 类模型 from django.db import models# Create your models here. class Car(models.Model):user models.CharField(max_length200)plate_number models.CharField(max_length20)def __str__(self):return f{self.user} -…

Linux之我不会

一、常用命令 1.系统管理 1.1 systemctl start | stop | restart | status 服务名 案例实操 1 查看防火墙状态 systemctl status firewalld2 停止防火墙服务 systemctl stop firewalld3 启动防火墙服务 systemctl start firewalld4 重启防火墙服务 systemctl restart f…

构建高可用和高防御力的云服务架构第一部分:深入解析DDoS高防(1/5)

引言 在数字化时代,网络安全已成为全球关注的焦点。随着互联网技术的快速发展和应用的广泛深入,网络安全形势日益严峻。特别是分布式拒绝服务(DDoS)攻击,以其破坏性强、难以防范的特点,对个人、企业乃至国…

Django操作ES实现搜索功能

Django操作ES实现题目的高亮搜索功能 一、基础配置二、使用ES完成题目的高亮搜索1. ES的初始化接口2. 使用ES实现题目的增删改查1. 题目的高亮搜索2. 题目的高亮搜索优化3. 将数据存储到MYSQL中持久化存储并同步到ES中一、基础配置 下载依赖,与之前配置的ES版本一致。 ES的配置…

Mac安装manim

文章目录 0.关于Manim1.官方安装方法2.使用conda2.1 下载Anaconda2.2 创建环境2.3 Required Dependencies 3.实验 今天发现Mac电脑以前安装的manim不能用了,索性重新装一次,顺便把过程记录下来。 0.关于Manim Manim 主要分为两个主要版本: …

使用VSCode远程调试AutoDL上的程序

在租用的AutoDL服务器上基于终端不便进行代码调试,而使用远程桌面控制部署也相对麻烦。pycharm 则需要专业版才能进行远程开发,如果使用Shell启动的程序也没有办法调试,最终选择利用 VScode 来进行远程代码调试。 一、远程租用并启动服务器 …

一步到位:如何在卡内基梅隆大学计算机科学学院官网下载并安装ACME软件

想要在卡内基梅隆大学计算机科学学院官网下载ACME软件?下面是详细的操作步骤! 1. 访问官网 首先,打开卡内基梅隆大学计算机科学学院的官方网站。 2. 搜索ACME软件 在官网首页的搜索框中输入“acme”,然后按下回车键。 3. 找到下载…

大数据Flink(一百二十四):案例实践——淘宝母婴数据加速查询

文章目录 案例实践——淘宝母婴数据加速查询 一、​​​​​​​创建数据库表并导入数据 二、​​​​​​​​​​​​​​创建session集群 三、​​​​​​​​​​​​​​源表查询 四、​​​​​​​​​​​​​​指标计算 案例实践——淘宝母婴数据加速查询 随着…

【全新课程】正点原子《ESP32基础及项目实战入门》培训课程上线!

正点原子《ESP32基础及项目实战入门》全新培训课程上线啦!正点原子工程师手把手教你学!熟练掌握ESP-IDF开发,突破ESP32入门难题! 一、课程介绍 本课程针对ESP32的入门和基础外设进行系统教学,内容包括环境搭建、编程…