28张图剖析kafka:简直666,狂拽吊炸天

4 篇文章 0 订阅
4 篇文章 0 订阅

28张图剖析kafka:简直666,狂拽吊炸天

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

基础

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

img

生产者消费者: 生产者即 Producer 向 Kafka 发送消息,消费者即Consumer 监听 Kafka 接收消息。

img

一个服务可以既是生产者又是消费者。

img

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

img

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

img

Kafka 中有一个【consumer-group(消费者组)】的概念。 这是一组服务,扮演一个消费者组。

img

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

img

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

Topic 扮演一个消息的队列。 首先,一条消息发送到Topic。

img

然后,这条消息被记录和存储在这个Topic中,不允许被修改。

img

接下来,消费者会从Topic中拉取消息进行消费。 但是,这条消息并 不会 被删除,会继续保留在队列中。

img

继续发送消息。

img

像之前一样,这条消息会发送给消费者、不允许被改动、一直呆在队列中 ( 消息在队列中能呆多久,由Kafka 的配置决定)

img

img

Partitions 分区: 上面 Topic 的描述中,把 Topic 看做了一个队列,实际上,一个 Topic 是由多个队列组成的,被称为【Partition(分区)】。 这样可以便于 Topic 的扩展。

img

生产者发送消息的时候,这条消息会被路由到此 Topic 中的某一个 Partition。

img

消费者监听的是所有分区。

img

生产者发送消息时,默认是面向 Topic 的,由 Topic 决定放在哪个 Partition,默认使用轮询策略。

img

也可以配置 Topic,让同类型的消息都在同一个 Partition。 例如,处理用户消息,可以让某一个用户所有消息都在一个 Partition(即消息根据用户ID的hash值决定目标分区)。

例如,用户1发送了3条消息:A、B、C,默认情况下,这3条消息是在不同的 Partition 中(如 P1、P2、P3)。 在配置之后,可以确保用户1的所有消息都发到同一个分区中(如 P1)。

img

这个功能有什么用呢? 这是为了提供消息的【有序性】。 消息在不同的 Partition 是不能保证有序的,只有一个 Partition 内的消息是有序的。

img

img

架构

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

img

ZooKeeper 管理者所有的 Topic 和 Partition。 Topic 和 Partition 存储在 Node 物理节点中,ZooKeeper负责维护这些 Node。

img

例如,有2个 Topic,各自有2个 Partition。

img

这是逻辑上的形式,但在 Kafka 集群中的实际存储可能是这样的:

img

Topic A 的 Partition #1 有3份,分布在各个 Node 上。 这样可以增加 Kafka 的可靠性和系统弹性。 3个 Partition #1 中,ZooKeeper 会指定一个 Leader,负责接收生产者发来的消息。

img

其他2个 Partition #1 会作为 Follower,Leader 接收到的消息会复制给 Follower。

img

这样,每个 Partition 都含有了全量消息数据。

img

即使某个 Node 节点出现了故障,也不用担心消息的损坏。 Topic A 和 Topic B 的所有 Partition 分布可能就是这样的:

img

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

最后:

最近我整理了整套**《JAVA核心知识点总结》**,说实话 ,作为一名Java程序员,不论你需不需要面试都应该好好看下这份资料。拿到手总是不亏的~我的不少粉丝也因此拿到腾讯字节快手等公司的Offer

进[Java架构资源交流群] ,找管理员获取哦-!

ermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0phdmFfY29sYQ==,size_16,color_FFFFFF,t_70#pic_center)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值