重点在于Broker的结构。每一个消息归宿于特定的Broker下的特定的Topic下特定的Partion。而这些对应关系则被ZooKeeper记录下来。
二、特点 异步通信一种典型的观察者模式的实现。
观察者模式—菜鸟教程
解耦可以并行的任务可以作为不同的消息放进消息队列,由多个系统并行处理。如上图当支付完成后,向消息队列中放入多个不同的任务(消息),后台系统通过订阅拉取对应的任务进行处理。即可做到解耦和异步通信。
削峰类似于延迟满足,通过拖延消息处理来缓解消息压力。
三、原理(细节)由上面可以看出来,Kafka的结构可以理解为一个列表(Broker)套列表(Topic)套队列(Partion)。而消息本身就像树节点一样不具备记录自身路径的能力,记录树这个数据结构的就是ZooKeeper。
这里比较特殊的一点是:Kafka中的分区(Partion)可以分布在不同的服务器(broker)上,即一个主题可以跨越多个broker。Kafka保证的是分区有序而不是主题有序。分区(Partion)还有多个副本(Replica)用来进行容灾备份。多个副本之间是一主多从结构。
假设有三个主题P1-3,每个主题有1个分区,每个分区有三个备份(Kafka中的备份即是全部的主+从数目)。分布在4个Broker上。
分区(Partion)由偏移量(Offset)进行指示:
Last Committed Offset:Consumer最后提交的位置。
Current Position:Consumer当前读取的位置,但是还没有提交给broker。提交之后就变成Last Commit Offset。
High Watermark(HW):consumer不能读取超过HW的消息,因为这意味着读取到未完全同步(因此没有完全备份)的消息。
Log End Offset:当前的最新日志写入(或者同步)位置。
一个Leader,多个Follower。那么肯定有些和Leader完全同步,构成ISR集合。有些没有完全同步,构成OSR集合。所有的副本(Replica)即Total(Leader+Follower) 统称为AR,即AR=ISR+OSR。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)