Kafka学习(二)——组成以及原理分析


前言

本章主要内容:讲解kafka的组成部分,介绍kafka的工作原理

消息模型

队列

在这里插入图片描述
一个生产者发送一条消息到队列里,只能有一个消费者去消费此消息。

发布-订阅式

在这里插入图片描述
生产者发送一个消息到Topic中,消息会被广播到,订阅此topic的所有消费者。

问题:
如果Topic消息产生速度过快,而消费者处理消息较慢,该怎么办呢?

优化模型

在这里插入图片描述
定义消费组,去消费Topic中的消息。当消息量很大时,由消费组中的一个消费者去消费该消息,实现负载均衡的效果。


一、Kafka的消息模型

在这里插入图片描述
特点:

  • Kafka只支持消息持久化。
  • 消费端为拉模型。
  • 消费状态和订阅关系由客户端端负责维护,消息消费完后不会立即删除,会保留历史消息。
  • 多订阅时,消息只会存储一份。

消费模式:

  • kafka提供一个消费者抽象模型( 消费者组(consumer group))。
  • 消费者用一个消费组名(group-id)来标识自己。
  • 当某个Topic只有一个消费组订阅,且该消费组只有一个消费者时,就是队列(queue)下的点对点消费模式。
  • 当某个Topic有多个消费组订阅,且每个消费组只有一个消费者时,就是发布订阅模式。

二、工作流程

先看一张图:

在这里插入图片描述

  1. 生产者producer1和producer2 发送消息到主题(Topic)中
  2. 消息主题(Topics)中使用多个partition存储消息
  3. 存放消息的partition(partition上的消息是有序的),是分布式存储在Broker中,且同时会有副本(replica)
  4. 每台机器一般有一个broker(或者多个broker)
  5. 消费者consumer 监听Topic ,然后消费partition上的消息

三、组成部分

从图中可以看出,有以下几个组成部分

Producer :

  • 生产者,提供往Topics 中添加消息的接口。

Broker :

  • 部署在服务器上的kafka实例,一台机器可以有多个。
  • broker存储topic的数据。如果某topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition。
  • 如果某topic有N个partition,集群有(N+M)个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个broker不存储该topic的partition数据。
  • 如果某topic有N个partition,集群中broker数目少于N个,那么一个broker存储该topic的一个或多个partition。在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致Kafka集群数据不均衡

Topics :

  • 可以理解为消息的类别,kafka中所有的消息都是放在不同的Topic下的。

Partition

  • Topics中的消息会拆分存储到多个Partition中。
  • 每个Partition上的消息是有序的。

Consumer

  • 从broker上消费Topics中的消息,可以同时消费多个Topics的消息。

Consumer Group:

  • 同一个Consumer Group下的多个Consumer消费者,消费同一个Topics主题消息时。每个消息只能由该Consumer Group下的一个Consumer消费。
  • 不同的Consumer Group的多个Consumer消费者,消费同一个Topics主题消息时。每个消息可以被不同Consumer Group下的Consumer消费,互不影响。

Leader和Follwer

  • 每个分区有一个leader,零或多个follower。Leader处理此分区的所有的读写请求,而follower被动的复制数据。
  • 当leader宕机后,follower机之间竞选机制,产生新的leader机,维持集群稳定。
  • 一台服务器可能同时是一个分区的leader,另一个分区的follower。

四、详细流程

在这里插入图片描述

没啥比看图更容易让人理解了~


总结

  1. 介绍了两种消息模型(队列以及发布订阅)。以及为了实现消息的负载均衡,减轻消费者的压力,从而引入消费者组的概念。
  2. 介绍了kafka的消息模型,消息模型的变化可以实现队列和订阅发布模式。
  3. 介绍了消息流程和组成
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值