kafka集群架构与原理

前言

        这次我们从消息队列开始讨论。生产者-消费者模型中间需要一个消息队列,以存储生产者的产品。对传统的消息队列来说,它支持点对点(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.xdnf.cn/news/148926.html

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

相关文章

OpenCV_自定义线性滤波(filter2D)应用详解

OpenCV filter2D将图像与内核进行卷积,将任意线性滤波器应用于图像。支持就地操作。当孔径部分位于图像之外时,该函数根据指定的边界模式插值异常像素值。 卷积核本质上是一个固定大小的系数数组,数组中的某个元素被作为锚点(一般…

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

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

SAP B1 认证考试习题 - 基础主数据(解析版)

感谢投喂*罒▽罒* 一、基础 1. 下列哪个产品不是以中小型企业为目标客户的 A. mySAP All-in-One B. SAP Business One C. mySAP Business Suite 答案:C 解析:SAP Business One -- 为小型企业定制的解决方案(250人以下)&…

【论文】FunAudioLLM:一个旨在增强人类与大型语言模型(LLMs)之间自然语音交互的模型家族

研究背景 1.研究问题:这篇文章要解决的问题是如何增强人类与大型语言模型(LLMs)之间的自然语音交互。具体来说,研究集中在语音识别、情感识别和音频事件检测(多语言)以及语音生成(多语言、零样…

Python模拟真人鼠标轨迹

一.API跨语言平台支持 鼠标轨迹API 底层实现采用 C/C 语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为 DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言…

【C++】容器适配器,stack,queue,priority_queue详解,模拟实现

目录 1. stack和queue的介绍 1.1 stack的成员函数 1.2 queue的成员函数 1.3 stack的使用 1.4 queue的使用 1.5 Container模板参数,deque 2. priority_queue优先级队列的介绍 3. stack模拟实现 3.1 初始结构 3.2 push 3.3 pop 3.4 top 3.5 empty 3.6 s…

C++笔试强训15、16、17

文章目录 笔试强训15一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训16一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训17一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训15 一、选择题 1-5题 共有派生下,派生类的成员函数只能访问基类的…

揭秘智能派单流程:如何利用AI实现高效的自动化任务分配?

前言 在当今的企业管理和服务行业中,高效的工作分配与任务管理是提升企业竞争力的重要因素。智能派单流程通过结合先进的算法和人工智能技术,实现了工作任务的自动化分配和优化管理,不仅帮助企业提升了工作效率,降低了运营成本&a…

Kubernetes强制删除terminating状态的namespace

Kubernetes中的Namespace处于Terminating状态并且常规删除不起作用。 1.Namespace长时间处于Terminating状态往往是因为某些finalizers阻止了它的删除。 kubectl get namespace <namespace-name> -o json > namespace.json 2.编辑生成的 namespace.json文件&#xff…

在 Vue 3 中实现“折叠”与“展开”文本内容

偶然间遇到一个场景&#xff0c;怎么判断一段文本是否超过 5 行或者指定行数&#xff0c;并在超过时显示 "展开/收起" 按钮。那应该如何实现呢&#xff1f; 在 Vue 3 的项目下实现&#xff1a; <template><div class"text-container"><di…

计算机毕业设计 学院网站系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Java框架学习(Spring)(ioc)(01)

简介&#xff1a;以本片记录在尚硅谷学习ssm-spring-ioc时遇到的小知识 详情移步&#xff1a;想参考的朋友建议全部打开相互配合学习&#xff01; 视频&#xff1a; 014-spring-框架概念理解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1AP411s7D7?p14&vd_sou…

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

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

GIS留学院校介绍-英国篇

看前须知 关于语言成绩要求&#xff1a; 通常英国院校的雅思成绩要求分为5个等级&#xff0c;标准分别如下&#xff1a; 1级&#xff1a;总分6.5分&#xff0c;每个部分最低6.0分 2级&#xff1a;总分7.0&#xff0c;每个部分至少6.5分 3级&#xff1a;总分7.0分&#xff…

2024年有什么开放式耳机推荐?盘点开放式蓝牙耳机排行榜前五名

​到了2024年&#xff0c;开放式耳机无疑成为了耳机市场的宠儿。它们的优势在于&#xff0c;不仅佩戴舒适&#xff0c;还能在保护听力的同时&#xff0c;让你保持对周围环境的警觉&#xff0c;这对于爱好户外探险的朋友来说&#xff0c;无疑是一个巨大的安全加分项。作为一名资…

(附源码)微信小程序的拼车设计-计算机毕设19413

微信小程序的拼车设计 摘 要 在微信小程序的拼车服务中&#xff0c;后端架构巧妙地运用了SSM&#xff08;Spring、SpringMVC、MyBatis&#xff09;框架&#xff0c;为用户带来了流畅、高效的体验。Spring框架作为整个系统的核心&#xff0c;不仅管理着业务逻辑&#xff0c;还通…

分布式光伏的发电监控

国拥有丰富的清洁可再生能源资源储量&#xff0c;积极开发利用可再生能源&#xff0c;为解决当前化石能源短缺与环境污染严重的燃眉之急提供了有效途径[1]。但是可再生能源的利用和开发&#xff0c;可再生能源技术的发展和推广以及可再生能源资源对环境保护的正向影响&#xff…

PCB生产,在钻咀和成品孔径之间,你会优先满足哪一项呢

高速先生成员--王辉东 曹梦总是说&#xff0c;人生如《忐忑》&#xff0c;虽然没有准确的歌词&#xff0c;却演绎的惊心动魄…… 她是工厂的工程评估员&#xff0c;对于PCB的热爱&#xff0c;就像拖拉机上山&#xff0c;轰轰烈烈&#xff0c;不知疲倦。 她一向秉承的原则是&…

Excel名字查重筛选,查找重复内容原来这么简单

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f50d; 在处理大量数据时&#xff0c;尤其是人员名单或客户信息时&#xff0c;确保没有重复的名字是非常重要的。在Excel中&#xff0c;有几种方法可以帮助我们快速查找和处理重复的名字。今天&#xff0c;我们将介绍…

[linux 驱动]块设备驱动详解与实战

目录 1 描述 2 结构体 2.1 block_device_operations 2.2 gendisk 2.3 block_device 2.4 request_queue 2.5 request 2.6 bio 3.7 blk_mq_tag_set 3.8 blk_mq_ops 3 相关函数 3.1 注册注销块设备 3.1.1 register_blkdev 3.1.2 unregister_blkdev 3.2 gendisk 结构…