kafka原理ppt-kafka 原理 ppt
手把手拆解 Kafka:那台让你代码变好办的发信机器 别急着往下看理论,先别给 Kafka 贴“消息队列”这个标签。它不是啥“管着几百万消息”的数据库,也不是个好的“数据库备份方案”。它更像是一个专门负责在海量数据吞吐中,帮你把数据按标签分门别类地扔进银行卡的“ феервер克”(发信器)。你的代码只需求写几句话,想让它把几百亿条数据按日期分类扔进不同的银行卡里,就像从一堆乱扔的乐高积木里,按颜色挑出来造出整规整齐的房子一样好办。 想象一下,你有一艘万吨巨轮,里面装满了从世界各地运来的货物。船挺大,但货物种类多得像菜市场。
这时候,要是你要让船商场把木桶拿到码头卸货,要么让船上的货物按种类分发到不同的仓库,光靠人眼去指挥那帮船工,绝对搞不定。你务必得有一套自动化系统,能瞬间把船上的货按目标地分拣出去。 Kafka 就是这个系统的核心大脑。它的名字有点拗口,但你得知道,它不只是“消息队列”,它是一个能存海量消息的“持久化”存系统。它最了得的地方,在于它能把消息存起来,让你不用每次都去翻仓库找数据。 这套系统平时不如何讲话。后台把消息扔进去的时候,它只是默默地把数据塞进硬盘,要么把消息发给消息处理器(Consumer)。
这时候它是个沉默的工兵,干着活,不让人看到。
只有当你需求“读消息”的时候,它才会像变魔术一样,把硬盘里的数据重新拼凑出来,给你展示。 核心的亮点在于它那种“带宽无限”的本事。你的代码只需求写一行“向 Kafka 写入一条消息”,它就能帮你搞定这个动作。至于这条消息能存多少条、存几年,全看你想不想设好规则。
要是你今天想存一万条,明天想存十万条,Kafka 都能省事搞定。它不在乎你每次往它肚子里塞多少,它只管让你往里面塞,数据会自动分类、自动存,直到你拍板啥时候读出来。 这就好比你在写一个电商系统,每天要处理几亿次下单操作。
要是你只让代码去调用你的数据库,数据库扛不住,写个脚本天天跑一遍,结局写个 Bug 只能修,效率低不说还好办出坑。但要是你给 Kafka 一个接口,让它帮你把订单信息按订单号、按商品名、按工夫戳分类,然后丢进 Kafka 的队列里。你的代码只需求调用一个 API 把这些分类好的订单扔进去,剩下的脏活累活——比如数据库的数据同步、缓存的维护、就连数据库的升级——全由 Kafka 自己扛着。 你只需求关切你的业务逻辑:收到订单 -> 写入 Kafka -> 花者去读消息去处理订单。你不需求关心 Kafka 底层如何存,如何分块,如何把消息传送到下游的服务。它把那些复杂的工程细节都抽象成了接口,让你只管发消息。 这条规则是 Kafka 的灵魂。它定义了消息的“身份”。消息是活的,它可能会迟到,可能会重复,可能会被其他消息打断。Kafka 通过它定义的“身份”,把这些消息明确地区分开来了。
比如一个订单消息,它的身份是“订单号 123456",要是同一个订单号里有两条消息,它们就是一对一的关系。而另外一个消息,它的身份是“商品号 999",要是商品号 999 上有五笔交易,那它就是五笔交易。 这种“身份”的概念,让 Kafka 不需求去猜每条消息归于哪位的,也不需求去搞复杂的版本管住。它只需求告诉花者:“嘿,把消息 123456 读出来,别搞错了”,要么“把这五笔商品 999 的交易都处理掉”,彻底不用操心。 为了证明 Kafka 的强大,我们来看一组数据。假设你有一个电商系统,每天要往 Kafka 里扔几亿条订单数据。 正常的做法是,你的代码(Producer)每处理一条数据,就把它扔给数据库,然后数据库再同步到 Kafka。
这就像你每天拿着一个信封去银行,银行再给你发一个同样内容的信封。
要是你每天扔几亿个信封,那你得去银行几百亿次。 要是用 Kafka,你的代码每扔一条数据,就把它扔进 Kafka,然后由 Kafka 定期同步到数据库。你每天只去银行几千次(假设 Kafka 延迟工夫挺短),数据库那边只需求扔几千次。别看每天扔的总数据量没变,但你的代码量削减了 99% 以上。 更夸张的还有一次大促,单点系统要处理 1 亿数据。 一般/平平方案:系统崩溃,全丢,全重,效率极低。 Kafka 方案:消息缓存有 Kafka 里,花者分批读,不占系统内存。Kafka 把 1 亿条数据快速分块存,花者按需读取。你只需求处理 1% 的数据,就能搞定 100% 的业务。 Kafka 还有一个绝妙的特性叫“Exactly Once"语义(准一次语义)。它保证了,要么这条消息被花了,要么压根儿没被花过。
要是有重复花,Kafka 会把它踢走;要是有丢失花,它会重新生成直到凑齐这条消息的副本。
这使得它贼适合做金融交易、物流追踪这种绝对不能出错的事件。 自然,Kafka 也不是完美的。它确实有个“延迟”的难题。出于它要分批处理,消息放进去后可能要等待会儿,花者才能读到。
这在实时性要求极高的场景下可能会让人认定有点慢。但要是你把延迟容忍度设低一点,比如延迟管住在 100 毫秒以内,要么接纳 1% 的消息丢失,那这一切就都值得了。
毕竟,对于大多数业务场景,这 1% 的丢失要么 100 毫秒的等待,换来的就是系统架构的彻底解放。 最终总结一下。Kafka 不是那种让你天天去维护、去查日志、去调参数的“数据库”。它是一种“消息缓存”,是一种“消息分发器”。它让你把代码写得贼简洁,只关切你关心的业务逻辑。 当你说“把消息扔进去”时,Kafka 会默默地把这些消息分类存好,交给花者去读。当你说“读消息”时,Kafka 再把数据拿回来,供你处理。它不需求你关心数据如何存,也不需求你关心数据如何分,它只是那个默默搬运工。 在这种架构下,你的代码量能够少个 90% 以上,系统稳定性大幅提升,开发效率见长。
这就是 Kafka 带来的力量。它让那些复杂的运维工作,都化为了你代码里的一行好办指令。
声明:演示网站所有内容,若无特殊说明或标注,均来源于网络转载,仅供学习交流使用,禁止商用。若本站侵犯了你的权益,可联系本站删除。
