查看原文
其他

图解 Kafka,触类旁通

点击关注 👉 顶级架构师 2023-09-18
推荐关注
顶级架构师后台回复 1024 有特别礼包


作者:Timothy Stepro
来源:blog.csdn.net/duysh/article/details/116355977
译文:timothystepro.medium.com/visualizing-kafka-20bc384803e7

上一篇:我的编程能力从这时候开始突飞猛进的


大家好,我是顶级架构师。


目录


  • 前言

  • 基础

  • 生产消费者

  • Topics 主题

  • Partitions 分区

  • 架构



前言

Kafka 是主流的消息流系统,其中的概念还是比较多的,下面通过图示的方式来梳理一下 Kafka 的核心概念,以便在我们的头脑中有一个清晰的认识。



基础

Kafka 是一套流处理系统,可以让后端服务轻松的相互沟通,是微服务架构中常用的组件。


生产者消费者

生产者服务 Producer 向 Kafka 发送消息,消费者服务 Consumer 监听 Kafka 接收消息。
一个服务可以同时为生产者和消费者。


Topics 主题


Topic 是生产者发送消息的目标地址,是消费者的监听目标。

一个服务可以监听、发送多个 Topics。

Kafka 中有一个【consumer-group(消费者组)】的概念。


这是一组服务,扮演一个消费者。
如果是消费者组接收消息,Kafka 会把一条消息路由到组中的某一个服务。

这样有助于消息的负载均衡,也方便扩展消费者。


Topic 扮演一个消息的队列。


首先,一条消息发送了。
然后,这条消息被记录和存储在这个队列中,不允许被修改。

接下来,消息会被发送给此 Topic 的消费者。


但是,这条消息并不会被删除,会继续保留在队列中。
继续发送消息。
像之前一样,这条消息会发送给消费者、不允许被改动、一直呆在队列中。(消息在队列中能呆多久,可以修改 Kafka 的配置)

牛逼啊!接私活必备的 N 个开源项目!赶快收藏吧


Partitions 分区

上面 Topic 的描述中,把 Topic 看做了一个队列,实际上,一个 Topic 是由多个队列组成的,被称为【Partition(分区)】。


这样可以便于 Topic 的扩展。
生产者发送消息的时候,这条消息会被路由到此 Topic 中的某一个 Partition。
消费者监听的是所有分区。
生产者发送消息时,默认是面向 Topic 的,由 Topic 决定放在哪个 Partition,默认使用轮询策略。

也可以配置 Topic,让同类型的消息都在同一个 Partition。


例如,处理用户消息,可以让某一个用户所有消息都在一个 Partition。


例如,用户 1 发送了 3 条消息:A、B、C,默认情况下,这 3 条消息是在不同的 Partition 中(如 P1、P2、P3)。另外,搜索公众号Java后端栈后台回复“面试”,获取一份惊喜礼包。


在配置之后,可以确保用户 1 的所有消息都发到同一个分区中(如 P1)。

这个功能有什么用呢?这是为了提供消息的【有序性】。


消息在不同的 Partition 是不能保证有序的,只有一个 Partition 内的消息是有序的。


架构

Kafka 是集群架构的,ZooKeeper是重要组件。

ZooKeeper 管理者所有的 Topic 和 Partition。扩展:接私活儿


Topic 和 Partition 存储在 Node 物理节点中,ZooKeeper负责维护这些 Node。
例如,有2个 Topic,各自有2个 Partition。
这是逻辑上的形式,但在 Kafka 集群中的实际存储可能是这样的:

Topic A 的 Partition #1 有 3 份,分布在各个 Node 上。这样可以增加 Kafka 的可靠性和系统弹性。


3个 Partition #1 中,ZooKeeper 会指定一个 Leader,负责接收生产者发来的消息。
其他 2 个 Partition #1 会作为 Follower,Leader 接收到的消息会复制给 Follower。
这样,每个 Partition 都含有了全量消息数据。

即使某个 Node 节点出现了故障,也不用担心消息的损坏。


Topic A 和 Topic B 的所有 Partition 分布可能就是这样的:

感谢阅读,希望对你有所帮助!😃


欢迎大家进行观点的探讨和碰撞,各抒己见。如果你有疑问,也可以找我沟通和交流。


最后给读者整理了一份BAT大厂面试真题,需要的可扫码回复“面试题”即可获取。


公众号后台回复 架构 或者 架构整洁 有惊喜礼包!顶级架构师交流群

 「顶级架构师」建立了读者架构师交流群,大家可以添加小编微信进行加群。欢迎有想法、乐于分享的朋友们一起交流学习。

扫描添加好友邀你进架构师群,加我时注明姓名+公司+职位】


版权申明:内容来源网络,版权归原作者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

猜你还想看

推荐一套开源通用后台管理系统(附源码)

看看人家那 IM 即时通讯系统,那叫一个优雅(附源码)

面试官:生成订单30分钟未支付,则自动取消,该怎么实现?

阿里技术专家:一文教你高效画出技术架构图

16个 Redis 常见使用场景,面试有内容聊啦

面试官问:MySQL的自增 ID 用完了,怎么办?

知名国产论坛,凉了!!!!

SpringBoot + Elasticsearch7.6 实现查询及高亮分词查询,超级详细!

Redis 延时任务,高手养成篇

Nginx+Redis:高性能缓存利器

高并发服务的几条优化经验

一款神仙儿企业级 ERP系统!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存