Kafka技术专题之总体原理和分析介绍(中)

Kafka Consumer底层原理分析【Kafka系列】 虽然目前Kafka0.10版本已经重写了其API,但底层原理是类似的,所以我们可以先了解kafka0.8.x里面的提供的Consumer的实现原理与交互流程 Kafka提供了两套API给Consumer The SimpleConsumer API The high-level Consumer API 本文介绍了这两种API的用法与底层原理 阅读详情

生产者消息对应分区策略

生产者分区投递原则的简单介绍:

1)指明partition的情况下,直接将指明的值直接作为partition值;
2)没有指明partition值但有key的情况下,将key的hash值与topic的partition数进行取余得到partition值;
3)没有partition和key情况下,第一次调用时随机生成一个整数,将这个值与topic可用partition总数取余得到partition值,也就是常说的round-robin算法。

Rebalance

Rebalance本质上是一种协议,规定了一个Consumer Group下的所有的Consumer如何达成一致来分配订阅Topic的每个Partition。比如某个group下有5个consumer,它订阅了一个具有10个分区的topic。正常情况下,Kafka平均会为每个consumer分配2个分区。这个分配的过程就叫rebalance。

Rebalance的触发条件

  • 1.有新的消费者加入Consumer Group
  • 2.有消费者下线,可能由于长时间未向GroupCoordinator(协调者)发送心跳,GroupCoordinator会认为其已下线
  • 3.有消费者主动退出Consumer Group
  • 4.订阅的topic分区出现变化
  • 5.调用unsubscribe()取消对某Topic的订阅

即Consumer或者Topic自身发生变化时,会触发Rebalance。

消息推送

  • 1)组装ProducerRecord,执行发送方法。
  • 2)经过序列化器Seriallizer,将key和value经过序列化成为二进制数组。发送到分区器。
  • 3)在分区器如果制定了partition,则直接返回对应的partition;否则分配器将基于key值来返回一个分区。
  • 4)确定分区后,将这些消息放到指定topic和partition的批量消息中。由另外的线程负责发送批量消息。kafka
    produce都是批量请求,会积攒一批,然后一起发送,不是调send()就进行立刻进行网络发包。
  • 5)broker接收到消息后,如果成功会返回一个RecordMetadata,失败且不重试的话,则会返回一个异常。

负载均衡:

通过Topic的一个partition只能给一个分组中的一个消费者消费,所以实现了一个分组中的每台服务器只能接收到一个Topic中的消息是不会重复的。

  • 场景:假设有一个分组代表着一个分布式集群,里面有5台相同的服务,也就是说这5台服务它们都订阅了相同的topic。
  • 当producer向topic中生产消息时会通过一定的策略生产到对应的partition中,一般业务只希望一条消息随机的给一台服务器消费到,然后做相应的业务处理,比如存储数据库等等。
  • 通过不同的partiton对应不同的服务,就实现了负载均衡,一般相同的组中都是相同的服务,所以每次只有一个服务能获取一个partiton的消息。
  • 因为每个消息只会被写到一个partiton中。这样就实现了服务的负载均衡并且不会数据重复消费的问题。

partition不止是实现了消费者端的负载,也实现了broker端的负载,由于partition一般都是均匀的分不到不同的broker物理机上,所以通过不一样的负载策略就达到了相应的broker的负载。

分散分布

  • kafka的partition和Replica全部都是均匀的分散在各个broker中,包括leader也分散到各个broker中避免broker热度过高,partition的分散实现了broker的负载均衡。
  • Replica的分散实现了broker同步数据时的写压力并且可以有效避免一个broker宕机。其他的broker的Replica可以顶上,不会造成数据的丢失,对应副本和分区的放置kafka集群会做内部的平衡。

Zookeeper在kafka中的作用

  • 1.记录broker registry:broker启动后会在zookeeper上注册一个临时的broker registry,包含broker的ip地址和端口号,所存储的topics和partitions,ISR信息。
  • 2.记录consumer registry:consumer启动后会在zookeeper上注册一个临时的consumer registry:包含consumer所属的consumer group以及订阅的topics。
  • 3.Kafka Broker Controller的选举:Kafka Broker集群受Zookeeper管理。

kafka的leader和follower

Kafka Broker节点一起去Zookeeper上注册一个临时节点,因为只有一个Kafka Broker会注册成功,其他的都会失败,所以这个成功在Zookeeper上注册临时节点的Kafka Broker会成为Kafka Broker Controller(leader),其他的Kafka broker 叫 Kafka Broker follower。

kafka的controller

Controller会监听其他的Kafka Broker的所有信息,如果这个kafka broker controller宕机了,在zookeeper上面的那个临时节点就会消失,此时所有的kafka broker又会一起去Zookeeper上注册一个临时节点,因为只有一个Kafka Broker会注册成功,其他的都会失败,所以这个成功在Zookeeper上注册临时节点的这个Kafka Broker会成为Kafka Broker Controller(leader),其他的Kafka broker叫Kafka Broker follower。

  • 例如:一旦有一个broker宕机了,这个kafka broker controller会读取该宕机broker所有的partition在zookeeper上的状态,并选取ISR列表中的一个replica作为partition leader(如果ISR列表中的replica全挂,选一个幸存的replica作为leader;
  • 如果该partition的所有的replica都宕机了,则将新的leader设置为-1,等待恢复,等待ISR中的任一个Replica“活”过来,并且选它作为Leader;或选择第一个“活”过来的Replica(不一定是ISR中的)作为Leader),这个broker宕机的事情,kafka controller也会通知zookeeper,zookeeper就会通知其他的kafka broker。

注册中心

zookeeper是充当了Kafka的注册中心,消息传递时,Producer在发布消息到某个Partition时是通过zookeeper找到该Partition的Leader的。

副本机制

分布式系统中,为了提高可靠性,最常用且最有效的策略是“副本机制”,Kafka 也不例外。

Kafka为每个Partition维护了一个AR(Assigned Replicas)列表,由ISR(In-Sync Replicas,与Leader数据同步的Replica)和OSR(Outof-Sync Replicas,与Leader数据不同步的Replica)组成。

初始状态下,所有的Replica都在ISR中,但在Kafka工作过程中,由于各种问题(网络、磁盘、内存)可能导致部分Replica的同步速度慢于参数replica.lag.time.max.ms指定的阈值,一旦出现这种情况,这部分Replica会被移出 ISR,降级至 OSR中。默认值为 10000,重要性为 High。

副本机制如何作用?

(1)producer指定Topic向Broker发送消息,经过内部处理(如负载均衡等)后写入某 Partition 的 Leader,Leader 收到消息数据后并不会立即回应 Producer,而是等待 ISR 列表中所有的 Replica同步数据完成,之后才向 Producer 返回成功消息。这是不是与 Raft 算法有点类似?

(2)基于上述分析,不难理解,只要保证 ISR 中的 Replica 数量大于 2(ISR 包括 Leader),即便出现 Leader突然故障下线的情况,也能保证消息不丢失(因为 ISR 中的 Replica 与 Leader 保持同步)。当然,凡事过犹不及,ISR 中Replica 的数量不宜过多,否则会降低 Kafka 的吞吐性能。

截断机制

LEO 和 HW 在正常情况下的流转过程,那遇到异常情况又会怎样呢?

如果出现Leader故障下线的情况,就需要从所有的Follower中选举新Leader,以便继续提供服务。

为了保证一致性,通常只能从ISR列表中选取新的Leader (上面已经介绍,ISR 列表中的 Follower 与原 Leader 保持同步),因此,无论 ISR 中哪个 Follower 被选为新的 Leader,它都知道 HW 之前的数据,可以保证在切换了 Leader 后,Consumer 可以继续“看到”之前已经由 Producer 提交的数据。

如下图所示,如果 Leader 宕机,Follower1 被选为新的 Leader,而新 Leader (原 Follower1)并没有完全同步之前 Leader 的所有数据(少了一个消息 6),之后,新 Leader 又继续接受了新的数据,此时,原本宕机的Leader 经修复后重新上线,它将发现新 Leader 中的数据和自己持有的数据不一致,怎么办呢?

为了保证一致性,必须有一方妥协,显然旧的 Leader 优先级较低,因此, 它会将自己的数据截断到宕机之前的 HW 位置(HW 之前的数据,与 Leader一定是相同的),然后同步新 Leader 的数据。这便是所谓的 “截断机制”。

【kafka】kafka的动态配置管理使用和分析 文章目录源码分析1. Broker启动加载动态配置1.1 启动加载动态配置总流程1. 2 加载Topic动态配置1.3 加载Broker动态配置2. 查询动态配置 流程 `--describe`3. 新增/修改/删除/动态配置 的流程Topic配置其他的类型都一样4. Broker监听/config/changes的变更源码总结Q&A如果我想在我的项目中获取kafka的所有配置该怎么办? 源码分析 1. Broker启动加载动态配置 KafkaServer.startup 1.1 启动加载动态配置 阅读详情

相关推荐

Kafka设计解析

针对kafka设计原理作了深入的解析,通过该文档可以了解kafka的设计理念和原理。

Kafka介绍

本篇文章是kafka的入门篇,主要介绍kafka一些基本的知识和架构,并没有涉及到一些原理的讲解,算是一篇入门文章。一、kafka的特性1.高吞吐量、低延迟:kafka每秒可以处理几十万条...

zhghost的专栏 1733

Zynq 双核AMP 通信

4、配置离线编译(这里不讲),配置linux的内核地址空间(0x4000_0000改为0x2000_0000),以及单核启动。CPU1设置为0x2000_0000~0x3FFF_FFFF(也可以小于0x3FFF_FFFF)如果禁用CPU1的L2 cache,在CPU1的bsp里面添加编译时候所需要的宏。3、配置工程,将vivado产生的.xsa文件复制到amp_com项目目录下。9、使用petalinux-package --boot 打包。一、vivado工程。5、编译u-boot。

y183128184的博客 1086

Kafka的存储机制以及可靠性

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33701294的博客 312

微信小程序协同工作和发布

微信小程序协同工作和发布

qq_53114527的博客 1620

扫地机器人设计与实现——基于嵌入式系统的智能家居解决方案

本文介绍了基于嵌入式技术的扫地机器人设计与实现。通过利用STM32单片机、传感器、驱动系统等硬件组件,并结合路径规划与控制算法、远程控制等软件技术,设计出了一款具有智能避障、路径规划、自动充电等功能的扫地机器人。系统的开发不仅提高了清洁效率,也为进一步研究和优化扫地机器人提供了实践基础。

2201_76125393的博客 1638

深入浅出解读 Kafka 的可靠性机制

在上一篇文章《再谈基于 Kafka 和 ZooKeeper 的分布式消息队列原理》中,我详细介绍了基于 Kafka-ZK 的分布式消息队列原理。本场 Chat 更进一步解读 Kafka 的一些可靠性机制:在消息队列系统中,一条消息的生命周期包括生产、发送、存储、消费和删除等流程,其中涉及诸多可靠性问题,同时,系统本身也存在可靠性问题,而这些可靠性问题又与可用性和吞吐性能密切相关。针对可靠性问题,K...

GitChat 673

uniapp - 解决App端(安卓/苹果)使用uni.openlocation跳转第三方高德地图白屏问题,安卓苹果ios平台使用应用内置地图查看位置打不开,打包后App高德地图页面白屏不显示的问题!

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,高德地图白屏,uniapp调用内置高德地图白屏,uniApp使用uni.openlocation空白不显示地图,uniappapp端如何解决openlocation地图不显示问题,打开第三方地图显示位置地图没反应,uni.openlocation跳转第三方高德地图,APP端白屏问题,使用uni.openlocation跳转到第三方导航软件的时候,app端跳转的是高德地图,但是白屏没有反应,打包发布后白

🏆 前端领域优质创作者 1万+

Kafka学习之路 (一)Kafka的简介

Kafka学习之路 (一)Kafka的简介 目录 一、简介 1.1 概述 1.2 消息系统介绍 1.3 点对点消息传递模式 1.4 发布-订阅消息传递模式 二、Kafka的优点 2.1 解耦 2.2 冗余(副本) 2.3 扩展性 2.4 灵活性&峰值处理能力 2.5 可恢复性 2.6 顺序保证 2.7 缓冲 2.8 异步通信 三、常用Message Queue对比 3.1 RabbitMQ 3.2 Redis 3.3 Zer

lisheng19870305的专栏 848

100天精通Python(可视化篇)——第98天:Pyecharts绘制多种炫酷日历图参数说明+代码实战

一、日历图介绍 二、基础配置 1. 配置项类 2. 添加函数 3. 日期标签配置 4. 坐标系配置 三、日历图实战 1. 基础日历图 2. 日历热图

努力让自己发光,对的人才能迎着光而来 2万+

【专栏目录】

🌟 深度学习工程师的终极武器库!本专栏深度解析近3年CV领域最前沿的YoloV8改进方案,每一种方法都经过实战验证,性能显著提升!🌟。

m0_47867638的博客 1万+

Kafka技术专题之总体原理和分析介绍(下)

前提回顾 经过了之前的【Kafka技术专题系列(上)】和【Kafka技术专题系列(中)】的学习,相信您对Kafka的基本原理应该已经有了一个简单的介绍和认识了,接下来需要对总体做个收尾。下篇结束之后,我会对Kafka所有相关的技术板块做细化,做每一个技术板块做深入和扩展。 总体架构 核心优势 kafka被设计成通用的数据流处理平台,日志收集器和消息队列。 高吞吐(日志聚合): 大型数据块的整合(offline 平台的拉取) 低延迟(消息队列) 分区、分布式的实时流处理,从一个流派生新的

Java_Pluto的博客 1320

山羚羊优化算法(MGO)详解:从自然智慧到优化引擎

山羚羊优化算法(MGO)是一种新型元启发式算法,灵感来源于山羚羊的社会行为和等级制度。该算法模拟了四种核心行为:领地独居雄性(局部开发)、母系山瞪羚群(群体协作)、单身雄性山瞪羚(全局探索)和迁徙觅食(动态扰动)。MGO通过数学建模将这些生物行为转化为优化机制,在探索与开发间实现平衡。算法已成功应用于函数优化、无人机路径规划和支持向量机优化等领域,展现出优异的性能。未来研究将聚焦于参数自适应调整、混合算法设计等方向,以进一步提升算法性能。

qq_42212808的博客 202

Kafka技术专题之总体原理和分析介绍(上)

背景介绍 发布订阅模式 点对点传递模式 该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序。 发布者将消息投递到Topic中,数据在持久化在Topic中,只有订阅了相应Topic的消费者才可以消费这个消息,一个Topic可以允许多个消费者订阅,一个消费者可以订阅多个Topic,所以Topic可以被所有订阅者消费,而被消费掉后不会立即删除,会保留历史消息。 kafka用的就是发布订阅模式: kafka就是一个流处理平台,是一个高效和实时具有发布订阅模式、分布式的、多副本的消息系统,kafka

Java_Pluto的博客 488

Aurix TC3xx系列MCU ADC模块简介(一)

简单介绍英飞凌Aurix TC3xx系列单片机ADC模块的特点及内部结构。

m0_38045338的博客 6358

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

kafka工作原理介绍

两张图读懂kafka应用:Kafka 中的术语 broker:中间的kafka cluster,存储消息,是由多个server组成的集群。 topic:kafka给消息提供的分类方式。broker用来存储不同topic的消息数据。 producer:往broker中某个topic里面生产数据。 consumer:从broker中某个topic获取数据。Kafka 中的术语设计:1、Broker  ...

Saint 9万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

推荐面试使用 |【夯实Kafka知识体系及基本功】分析一下Kafka总体原理和分析介绍「下篇」

kafka被设计成通用的数据流处理平台,日志收集器和消息队列。高吞吐(日志聚合):大型数据块的整合(offline 平台的拉取)低延迟(消息队列)分区、分布式的实时流处理,从一个流派生新的流;容错(当被投喂非日志数据时)为了支持这些特性,一系列组件被开发,使得kafka更像是一个DB的日志收集系统,而不是消息队列。选择用文件系统,而不是把日志存进进程的缓存再统一flush,有以下理由:顺序读写是随机读写的3000x(机械硬盘)OS disk page cache收益很大,有时缓存进进程反而是double c

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。 4705

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Kafka存取原理与实现分析,打破面试难关

在前面的几篇内容中,我们依次讲了Kafka的安装、与Spring Boot的结合,还有选型与应用场景。但是笔者也知道,对于很多小伙伴来说,原理及实现才算重头戏,而且也是面试热点,那么本次我们先来进行存取原理的分析,当然抱着疑问去学习才是最快的,因此在开始之前,我也先抛出一些Kafka的重点与热点问题,希望大家在学习过程中能总结印证

战斧的博客 8607

Kafka原理详细介绍

Kafka   Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。 1.前言   消息队列的性能好坏.

You’re a wanderer just like me 2万+

kafka原理分析—broker总体架构和启动流程

概述 本文分析了kafka的broker的实现架构,通过本文的分析,我们可以对broker的实现架构的各个部分有一个总体的了解。 实现broker的总体架构图 下图是broker内部的总体架构图(该图来自于kafka官方的设计文档): 从图中可以看出,kafka系统是由若干子系统构成。根据核心的功能模块,可以大体划分成以下几个子系统: 客户端连接请求处理服务 客户端指令处理服务 日志管理子系统...

zg_hover的专栏 2116

Kafka的介绍和原理分析

在了解kafka的到工作原理前,先来了解下框架组成。

m0_37938849的博客 174

kafka原理分析—API层实现总体框架分析

概述 本文描述了kafka broker API层的实现原理。 API层主要用来处理kafka客户端发送过来的请求,或者把请求发送给对应的处理子系统,并把处理结果返回给客户端。 也可以查看这篇文章来了解API层的功能。 API层的启动和初始化 上图是kafka API层的启动和初始化过程,可以看到,API层是通过一个线程池来实现的,该线程池也可以通过修改server.properties文件中的...

zg_hover的专栏 541

【Java进阶营】【Kafka技术专题】核心技术原理分析和介绍

[Kafka简介] **       Kafka是一种分布式的,基于发布/订阅的消息系统,它可以让你发布和订阅记录流。在这方面,它类似于一个消息队列或企业消息系统。它可以让你持久化收到的记录流,从而具有容错能力。** 主要设计目标如下: **     时间复杂度为O(1)的方式提供消息持久化能力,并保证即使对TB级以上数据也能保证常数时间的访问性能。** **       高吞吐率:使在非常廉价的商

352

Kafka 架构及原理分析

Kafka 架构及原理分析 Kafka适合什么样的场景? 它可以用于两大类别的应用: 构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue) 构建实时流式应用程序,对这些流数据进行转换或者影响。 (就是流处理,通过kafka stream topic和topic之间内部进行变化) 为了理解 Kafka 是如何做到以上所说的功能,从下面开始,我们将深入探索Kafka 的特性。 定位 消息中间件 消息引擎 分布式实时流处理平台 简介 使用场景 大数据领域

架构探险之道 2268

Kafka核心架构设计及核心技术原理分析

胡弦,视频号2023年度优秀创作者,互联网大厂P8技术专家,Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者,资深架构师,技术负责人,极客时间训练营讲师,四维口袋KVP最具价值技术专家,技术领域专家团成员,2021电子工业出版社年度优秀作者,获得2023电子工业出版技术成长领路人称号,荣获2024年电子工业出版社博文视点20周年荣誉专家称号,2024电子工业出版社年度优秀作者。

huxian1234的专栏 1592
上一篇: Kafka技术专题之总体原理和分析介绍(上)
下一篇: Kafka技术专题之总体原理和分析介绍(下)
普通网友
博客等级 码龄6年 3807粉丝 69原创
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值