apache Kafka Replication设计分析

Apache Kafka笔记(二):Topics,Partitions and Brokers Topics,Partitions and Replication Factor在消息订阅发布过程中的分析。 阅读详情

1.设计目标

提供可配置,需要保障强可用性可以enable这个功能,如果想要更高的效率而不太在乎数据丢失的话,可以disable这个功能
自动replica管理,当cluster发生变化时,即broker server增加或减少时,可以自动的管理和调整replicas

2.问题

 

 

 

  1. 如何将partition的replicas均匀的分配到各个broker servers上面?
  2. 如何进行replicas同步?

2.1 如何均匀的分配partition的replicas呢

例子如下:有15个partitions,5个brokers,做3 replicas
第一个replica怎么放,很简单,15/5,每个broker上依次放3个,如下图,012,345
然后再放其他replica的时候,思路如下:

  • a. 当一个broker down的时候,尽量可以把它的load分散到其他所有的broker上,从而避免造成单个broker的负担过重,所以要考虑k,broker-0上的3个partition,0、1、2的第二个replica没有都放到broker-1,而是分别放到broker-1、2、3上
  • b. 当然一个partition的多个replica也不能放到同一个broker,那样就没有意义了 ,
     

考虑p0的3个replica分别放在broker-0、1、2上,注意这个分配的过程只会在初始化的时候做一次,并且一旦分配好后,会把结果存在zookeeper上,当cluster发生变化时不会重新分配,这样避免当增减broker时做大规模的数据迁移 当增减broker时,只会以最小的数据迁移来部分的replicas(随机选择m/n partitions迁移到Broker上)

这个方法的问题是, 没有考虑到partition和broker server的差异性,简单可用

2.2 replica同步问题

支持同步和异步的方式
异步比较简单,leader存成功,就告诉client存成功,优势是低延迟,缺点是容易丢数据
同步即需要多个replica都存成功才告诉client存成功,缺点就是延迟比较长

在同步中,又需要考虑是否采用quorum-based的设计,或是采用all的设计
quorum-based的设计,活性比较强,延迟小些,问题是,至少要3-replics,并且要保证半数以上的replics是存活的
primary-backup的设计需要写所有的replicas,当然问题就是延迟比较长,而且一个慢节点会拖慢整个操作,好处就是比较简单,2-replicas也可以,只需要有一个replica是存活就ok

Kafka最终选择的是primary-backup方案,比较务实,作为balance
通过各种timeout来部分解决慢节点的问题
并且follower中message写到内存后就向leader发commit,而不等真正写到disk,来优化latency的问题
 

2.3 同步replication

同步方案可以容忍n-1 replica的失败,一个replica被选为leader,而其余的replicas作为followers
leader会维护in-sync replicas (ISR),follower replicas的列表,并且对于每个partition,leader和ISR信息都会存在zookeeper中

有些重要的offset需要解释一下,
log end offset (LEO),表示log中最后的message
high watermark (HW),表示已经被commited的message,HW以下的数据都是各个replicas间同步的,一致的。而以上的数据可能是脏数据,部分replica写成功,但最终失败了
flushed offset,前面说了为了效率message不是立刻被flush到disk的,而是periodically的flush到disk,所以这个offset表示哪些message是在disk上persisted的
这里需要注意的是,flushed offset有可能在HW的前面或后面,这个不一定
 

3. 写请求

client找到leader,写请求
leader写入本地log,然后每个followers通过socket channel获取更新,写入本地log,然后发送ack到leader ,leader发现已经收到所有follower发送的ack,表示message已经被committed,通知client,写成功
leader递增HW,并且定期广播HW到所有的followers,follower会定期去checkpoint HW数据,因为这个很重要,follower必须通过HW来判断那些数据是有效的(committed)
 

4.读请求

从leader读,注意只有HW下的数据会被读到,即只有committed过的数据会被读到

Broker失效场景

毫无疑问,这里需要考虑容错的问题
follower失败,很简单,leader可以直接把这个follower drop掉
当follower comeback的时候,需要truncate掉HW以上的数据,然后和leader同步,完成后,leader会把这个follower加会ISR

leader失败比较复杂一些,在写请求不同的阶段分为3种cases,
真正写数据前,简单,client重发
数据写完后,简单,直接选个新leader,继续
数据写入一半,这个有点麻烦,client会超时重发,如果保证在某些replica上,相同message不被写两次

当leader失败的时候,需要重新选一个leader,ISR里面所有followers都可以申请成为leader
依赖zookeeper的分布式锁,谁先register上,谁就是leader
新的leader会将它的LEO作为新的HW,其他的follower自然需要truncate,追赶leader
 

构建实时数据流处理平台:基于 Apache Flink 与 Kafka 的实战指南 在大数据时代,实时数据流处理已成为企业获取即时业务洞察、监控系统状态和驱动实时决策的重要手段。传统批处理方式已无法满足日益增长的实时性需求,而 Apache Flink 作为一款流处理引擎,能够对数据进行低延迟、高吞吐量的实时计算。同时,Apache Kafka 则提供了高效、可扩展的消息传输解决方案。本文将深入探讨如何利用 Apache Flink 与 Kafka 构建一个实时数据流处理平台,从架构设计、环境搭建、数据处理示例到性能优化,全流程展示实时数据流处理的实践经验。 阅读详情

相关推荐

第七篇——Apache Kafka的设计与实现

作者:禅与计算机程序设计艺术 1.简介 Apache Kafka是Apache软件基金会推出的一个开源分布式流处理平台,它最初由LinkedIn开发并于2011年9月正式发布,目前已成为 Apache 项目之一,是一个基于发布-订阅模式的分布式、高吞吐量、可容错、高可靠的消息系统,能够提供实时的消费和发

AI天才研究院 3260

kafka设计解析(一)

目前生产环境中,使用较多的消息队列有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ等。 消息系统的作用:异步处理、应用解耦、流量削峰和消息通讯 异步处理 用户注册后,异步发送邮件和注册短信。 缩短响应时间,提高吞吐量。 应用解耦 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险,两端互不影响。 流量削峰 通过队列暂存或...

rover 524

标题6:Apache Kafka入门——基础知识详解

作者:禅与计算机程序设计艺术 1.简介 Apache Kafka是一个分布式、高吞吐量、高容错率的开源消息系统。它最初由LinkedIn公司开发并于2011年成为Apache基金会孵化项目,之后成为Apache顶级项目。Kafka可以处理消费数据实时性,支持快速数据传输、存储和集群扩展等功能。 本文将详

AI天才研究院 2278

图文了解 Kafka 的副本复制机制

也可以到我个人博客阅读(点击下面阅读原文即可) https://www.iteblog.com/archives/2556.html让分布式系统的操作变得简单,在某种程度...

Hadoop技术博文 1248

MATLAB/Simulink BLDC电机控制模型搭建:六步换相与速度环实战

无刷直流电机(BLDC)控制是电机驱动领域的核心技术,其六步换相原理通过霍尔信号控制逆变器开关,使定子磁场与转子磁场保持垂直以产生最大转矩。在MATLAB/Simulink中搭建BLDC控制系统,需从电机本体建模入手,结合PWM占空比调节和速度环PI控制器,实现速度闭环与波形观测。该技术广泛应用于电动工具、无人机电调和伺服驱动器等场景。本文详细解析BLDC六步换相逻辑、反电动势建模及Simulink分层设计方法,帮助读者掌握从零搭建完整控制模型的工程实践。

weixin_28273593的博客 207

PX4无人机offboard开发之旅

(慢慢更)无人机OFFBOARD开发

InTereSTingHE的博客 1078

Apache Kafka Replication Design – High level

参考,https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Replication Kafka Replication High-level Design Replication是0.8里面加入的新功能,保障当broker crash后数据不会丢失 设计目标, 提供可配置,需要保障stronger durability可以ena...

weixin_34062469的博客 131

Python3实现基于ARIMA模型来预测茅台股票价格趋势

ARIMA(Autoregressive Integrated Moving Average)模型是一种广泛使用的时间序列分析方法,它可以用于对未来的数据进行预测。ARIMA模型由自回归模型(AR模型)、差分整合模型(I模型)和移动平均模型(MA模型)组成,因此也被称为ARIMA(p,d,q)模型。其中,p表示自回归阶数,d表示差分阶数,q表示移动平均阶数。具体来说,ARIMA模型可以通过以下步骤进行建模:数据预处理:对时间序列进行平稳性检验,如果不满足平稳性,则进行差分操作。

m0_64336780的博客 2万+

kafka集群搭建和使用Java写kafka生产者消费者

转载自:http://chengjianxiaoxue.iteye.com/blog/2190488 1 kafka集群搭建   Java代码   1.zookeeper集群  搭建在110, 111,112      2.kafka使用3个节点110, 111,112   修改配置文件config/server.properties 

Pilgrim 6715

Transformers 实战修炼与源码剖析专栏大纲

本专栏以 Hugging Face Transformers 为主线,围绕“能用、会调、敢上线、懂源码”四个目标展开。内容不把理论堆成公式墙,而是用真实或拟真的业务场景驱动:客服分类、合同抽取、知识库问答、模型微调、推理服务、监控告警、源码扩展等。采用“业务痛点 → 三人剧本对话 → 代码实战 → 总结思考”的四段式结构,让读者在动手完成一个个小项目的过程中,逐步理解 Tokenizer、Model、Pipeline、Trainer、Generation、PEFT、Accelerate、Serving等概念

davidwang456的专栏 922

钢结构焊接连接工艺

钢结构焊接连接工艺

wwdoffice950426的博客 61

Kafka 高性能吞吐揭秘

https://segmentfault.com/a/1190000003985468 A high-throughput distributed messaging system.--Apache Kafka Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲、异步通信、汇集日志、系统解耦等方面。相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分

scdxmoe的专栏 728

Error: Flash Download failed - Target DLL has been cancelled

由于换了新电脑,keil重装了下,然而之前的MCU的支持包没有安装,以及一些其他的问题,导致可以编译但是不能将程序烧录到单片机中。现整理一下解决思路: 1、将支持包下载并添加: 找到你需要用的MCU的具体型号: 例如: 点击网址,下载安装包,或者在csdn等其他网址下载安装包,将下载好的pack包放到keil5的安装目录下的.Download中: 点击file中的import,将路径选择到.........

hanhan的博客 5万+

演讲回顾|Apache Pulsar 在 360 消息队列 PaaS 平台上的探索与实践

1KB数据写入的总耗时为1.6ms,其中 NVMe 磁盘写入仅需0.05ms,而 BookKeeper 写入耗时达到 1.4ms,占总耗时的 87.5%。在 360 数据库场景的实测中,Pulsar 面临着严格的技术要求:需要保证消息顺序,微秒级的持久化延迟(实测达到 0.3ms),以及百万级的 TPS 吞吐能力(单生产者单线程实测 150 万条消息/秒)。Pulsar 特别适用于有明显业务波峰需要弹性伸缩的场景,需要延迟队列特性的业务,有多租户隔离要求的SaaS化场景,以及存在跨地域部署需求的情况。

Apache Pulsar 579

NEU-DET 冷轧钢缺陷检测:基于 YOLOv8 的目标检测与可视化 UI 实现

冷轧钢的生产过程中,由于设备故障、工艺问题或者人为因素,钢板表面可能会出现多种缺陷,如划痕、裂纹、孔洞等,这些缺陷会严重影响钢材的质量。它比之前的版本(如 YOLOv5、YOLOv4)在速度和精度上都有显著提升,并且对硬件要求较低,适合进行工业界面和嵌入式系统的应用。这些版本相较于更大型的模型(如 YOLOv8x)具有更快的推理速度和较低的资源占用,适合工业生产线中的实时应用。通过将训练好的模型部署到工业生产线摄像头中,我们可以实现实时的缺陷检测,极大地提升生产效率和产品质量。

YOLO 736

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

Edward的博客 855

揭秘Apache Kafka Replication机制:守护数据安全的关键支柱

只有位于ISR集合中的副本被认为是与Leader保持同步状态的,只有当消息被成功写入ISR中的所有副本后,才会被认为已“提交”(committed),这样消费者才能看到这条消息,确保了数据的一致性。Kafka的Replication实现了数据在不同Broker之间的冗余存储,一旦Leader副本所在的Broker宕机,Kafka的控制器(Controller)会立即从剩余的Followers中选举出一个新的Leader,继续提供读写服务,从而确保系统的高可用性。

i289292951的博客 519

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

kafka集群配置之kafka启动了创建topic报错:Replication factor: 1 larger than avail

大家好, 我是上白书妖! 知识源于积累,登峰造极源于自律 今天我根据以前所以学的一些文献,笔记等资料整理出一些小知识点,有不当之处,欢迎各位斧正 kafka启动了创建topic报错:Replication factor: 1 larger than available brokers: 0 [shangbaishuyao@Hadoop102 kafka]$ jps 10382 Jps 7758 ...

上白书妖 2231

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Kafka:Topic概念与API介绍

Topic 事件被组织并持久地存储在Topic中,Topic类似于文件系统中的文件夹,事件就是该文件夹中的文件。Kafka中的Topic始终是多生产者和多订阅者:一个Topic可以有零个、一个或多个生产者向其写入事件,也可以有零个、一个或多个消费者订阅这些事件。Topic中的事件可以根据需要随时读取,与传统的消息传递系统不同,事件在使用后不会被删除,相反,可以通过每个Topic的配置来定义Kafka应该保留事件的时间,之后旧事件将被丢弃。Kafka的性能在数据大小方面实际上是恒定的,因此长时间存储数据是非常

kaven 2万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

apache kafka系列之replication设计机制

概览: 其中一个broker被选举作为整个集群控制器,他将负责几个方面工作: 1.管理或领导分区变化. 2.create topic,delete topic 3.replicas(执行复制计划,复制partition) 集群控制器做出决定以后,操作信息或状态将永久注册并存储在zookeeper上,并且也可以通过RPC方式发送新的决定操作broker。控制器发布的决定

李志涛的专栏 7045

Kafka_ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 1

报错信息 详细报错信息 ERROR admin.TopicCommand$: org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 1 larger than available brokers: 0. 创建 Topic 的命令: kafka-topics --create --zookeeper cdh-manager:2181,cdh-node1:2181,cdh..

迎难而上 7111

Apache Kafka Docker 容器化部署指南

本文详细介绍了Apache Kafka的Docker容器化部署方案。主要内容包括:Kafka简介及其应用场景;基于Docker的部署环境准备与镜像获取;单节点、自定义配置、多节点集群等多种部署模式的具体实现方法;功能测试验证流程;生产环境配置建议(数据持久化、资源限制、安全设置等);常见故障排查方法。该方案通过容器化技术简化Kafka部署,提供从开发测试到生产环境的完整指导,强调高可用性、性能优化和安全配置,帮助用户快速构建可靠的消息流处理平台。

java_logo的专栏 1196

Apache Kafka 概览

简介 Apache Kakfa 是一个分布式流处理平台,既可以当做普通的消息中间件用于消息发布订阅,也可以存储并处理流式数据,其分布式设计使得其有较好的容错性,水平拓展性等。 通常可以用于当做消息订阅发布用于业务系统中,或者用于大数据方向,接受存储大量的流式数据并和对应的大数据处理框架结合使用,eg. Kafka + Samza 从物理部署层面来讲,其主要有如下几个模块: ZooKeeper 充...

Vioao's Blog 902

使用Docker搭建Apache Kafka环境

本文使用Docker技术创建单个Kafka节点和Kafka集群环境,并且使用可视化工具连接服务查看代理服务器的配置信息。

neweastsun的专栏 2529

Apache Kafka

Spark,Hadoop交流群,群QQ号:521066396,欢迎加入共同学习,一起进步~一、Apache Kafka简介官方网址:http://kafka.apache.org/ Kafka™ is used for building real-time data pipelines and streaming apps. It is horizontally scalable, fault-t

leegh1992的专栏 719
上一篇: Kafka delivery保证(kafka消息投递保证)
下一篇: kafka运行环境优化分析
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值