如何设计一个kafka(理解)

因业务需要而对消息中间件的频繁使用后,每次总会问自己一个问题:kafka为什么快?然后再去背一背八卦找找答案。直到近日终于能站在一个新奇的角度理解kafka,且积累的各种细节串通了起来,实属惊喜。

回到最开始的问题:kafka为什么快?或者换个问法,为何使用kafka?再换个问法,如果你是产品经理,你会如何使用kafka?是不是一头雾水,不知道从什么角度回答,有种说不出接口的感觉。其实你是知道的,就差将这些理解串起来。

记住这三个问题。提到kafka,就离不开kafka的三个关键概念:partition(分区),broker(代理)、副本。

现在将自己当成一个产品经理,产品中涉及到多个微服务,服务之间需要传递消息,服务会发送消息,也会接收消息,那么如何管理消息(生产-消费)是我们要解决的

最开始我们只有一台机子,所有相同的消息放在一个队列中,例如支付相关的消息对应一个队列,队列取名为Topic A;

发送的消息尾追队列,需要处理的消息按顺序从头消费。

后来,发现用户太多,都在排队等一个队列,效率不高。因此,建议将支付相关的消息平均存放在多个队列中,这样就保证可以多个消息一起处理。这就是分区 partition

后来,发现即使分区了,所有消息的读写压力都在服务器1上,因此购入服务器2希望分担一下压力。

如将Topoc A的部分 分区放到服务器2上。这就是 分区可以在多个服务器上

此时,我们就要考虑安全因素了。万一服务器1宕机了,岂不是消息都丢失了,服务器2也只能干着急,帮不了一点忙。因此需要将消息进行备份,且将备份的数据放在其他服务器上。

生产者 生产了消息------->将其保存到副本1(副本1:Leader)-----副本1同步给副本2(副本2:Follower)----副本1同步给副本3(副本3:Follower)

这些副本其实就是保存消息的文件

这样,即使服务器1宕机了,也就是副本a1-1 的消息丢失了,服务器2的副本a1-2 就变成了新的Leader,重启服务器1后,生产者与新的leader交互。这就是 多副本

此外,产品越做越大,不同类别的消息越来越多,有支付类的TopicA ,有音频类的 TopicB,有图文类的Topic C。定义一个控制器(Broker),让其负责这些Topic的创建、保证消息负载均衡的分配在多个分区。(如按照轮询策略,将第一条消息放在分区a1,第二条消息放在分区a2,第三条消息放在分区a1...还有其他的分配方式,可以指定不同的分区器)这就是Broker

此时还要考虑安全,万一服务器broker1失效了,怎么办

分区、多副本、Broker这三个概念就是kafka的核心。

根据业务发展,从0到1渗透讲解kafka是如何实现消息管理。

现在回到前面的问题:

kafka为什么快?或者换个问法,为何使用kafka?再换个问法,如果你是产品经理,你会如何使用kafka?

立马想到分区、多副本、Broker,并能结合业务讲出自己的理解,这些问题都可以不攻自破!

在此基础上,可以深究Api使用、多业务场景下kafka的解决方案等等。

相关推荐
小灰灰要减肥20 分钟前
装饰者模式
java
张铁铁是个小胖子31 分钟前
MyBatis学习
java·学习·mybatis
李昊哲小课1 小时前
deepin 安装 zookeeper
大数据·运维·zookeeper·debian·hbase
Yan.love1 小时前
开发场景中Java 集合的最佳选择
java·数据结构·链表
椰椰椰耶1 小时前
【文档搜索引擎】搜索模块的完整实现
java·搜索引擎
大G哥1 小时前
java提高正则处理效率
java·开发语言
智慧老师2 小时前
Spring基础分析13-Spring Security框架
java·后端·spring
lxyzcm2 小时前
C++23新特性解析:[[assume]]属性
java·c++·spring boot·c++23
V+zmm101342 小时前
基于微信小程序的乡村政务服务系统springboot+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
李洋-蛟龙腾飞公司3 小时前
HarmonyOS Next 应用元服务开发-分布式数据对象迁移数据文件资产迁移
分布式·华为·harmonyos