举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里。
而这个篮子就是”消息中间件“,顾名思义,首先是中间件,然后是用来存储消息的中间件。
这里鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的(就是tcp、https什么的),也称为报文,也叫“消息”。消息队列满了,其实就是篮子满了,”鸡蛋“ 放不下了,那赶紧多放几个篮子,其实就是扩容。所以消息中间件就是那个篮子。
因为对消息中间件的定位原因,所以我们对它有着一定的要求,例如消息的发布模型、容错、高吞吐高性能、扩容、安全、数据不丢失等等。
kafka名字的来源:因为 Kafka 系统的写性能很强,所以找了个作家的名字来命名似乎是一个好主意。kafka 的作者大学期间我上了很多文学课,非常喜欢 Franz Kafka 这个作家,另外为开源软件起这个名字听上去很酷。
这个是消息中间件或者消息系统比较基本的功能,可以解耦两个系统或者多个系统之间的紧耦合关系
其实如果将kafka定义为消息中间件,其实是有失偏颇的,因为随着kafka streams 的功能完善,kafka 本身已经具有了处理消息的实时能力——实时流处理,而且支持DSL,所以在我们构建流处理平台的时候我们可以将其考虑进去
Kafka是消息引擎,这里的消息就是Kafka处理的主要对象,也是kafka 存储的对象
主题就是承载消息的逻辑容器,在实际应用中多用于区分具体业务
表示分区中每条消息的位置信息,是一个单调递增不变的值。
Kafka中一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。
向主题发布新消息的应用程序。
从主题订阅新消息的应用程序。
表示消费者消费进度,每个消费者都有自己的消费者位移。
多个消费者实例共同组成的一个组,同时消费多个分区实现高吞吐。
消费者组内某个消费者实例挂掉后,其它消费者实例自动重新分配订阅主题分区的过程。Rebalance 是kafka消费者端实现高可用的重要手段
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/king14bhhb/article/details/114488332
内容来源于网络,如有侵权,请联系作者删除!