Kafka图解

Kafka简介

Kafka(a distributed streaming platform )纠正一个观点,从本质上来讲并不是一种消息队列而是一种分布式流平台,在大数据里,常用来对接实时流处理平台(符合流平台的基本要求:高并发、低延时、高吞吐、高可靠),类似于消息中间,但不同于消息中间,(不同于消息中间:时序性、消息级分类等等区别);
在这里插入图片描述

类似于消息队列,可以用来处理大量数据状态下的消息队列,一般用来做日志的处理。Kafka拥有消息队列的相应的特性:

  • 解耦合 如果是接口的方式客户端请求服务端,服务端再响应并返回消息,消息具有一定的延迟且不说,这种通过接口的方式,耦合度很高。而利用消息队列,可以将相应的消息发送到消息队列,这样的话,如果接口出了问题,将不会影响到当前的功能。
  • 异步处理 异步处理替代了之前的同步处理,异步处理不需要让流程走完就返回结果,可以将消息发送到消息队列中,然后返回结果,剩下让其他业务处理接口从消息队列中拉取消费处理即可。
  • 流量削峰 高流量的时候,使用消息队列作为中间件可以将流量的高峰保存在消息队列中,从而防止了系统的高请求,减轻服务器的请求处理压力。

值得强调提醒的是
要处理对是对实时性具有强烈要求的数据还是建议用MQ; MQ和kafka之间还是存在一定差异的。

Kafka消费模式

Kafka的消费模式主要有两种:

  • 一对一的消费,也即点对点的通信,即一个发送一个接收。
  • 一对多的消费,即一个消息发送到消息队列,消费者根据消息队列的订阅拉取消息消费。

一对一:
在这里插入图片描述

一对多:
在这里插入图片描述

这种模式也称为发布/订阅模式,利用Topic存储消息,消息生产者将消息发布到Topic中,同时有多个消费者订阅此topic,消费者可以从中消费消息,注意发布到Topic中的消息会被多个消费者消费,消费者消费数据之后,数据不会被清除,Kafka会默认保留一段时间,然后再删除(消息在队列中能呆多久,可以修改 Kafka 的配置)

  • Topic 是生产者发送消息的目标地址,是消费者的监听目标。
  • 如果是消费者组接收消息,Kafka 会把一条消息路由到组中的某一个服务。

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

在这里插入图片描述

  • 一个 Topic 可以由多个队列组成的,被称为Partition(分区),也可以由一个Partition组成。
  • 生产者发送消息的时候,这条消息会被路由到此 Topic 中的某一个 Partition。
  • 消费者监听的是所有分区。
  • 生产者发送消息时,默认是面向 Topic 的,由 Topic 决定放在哪个 Partition,默认使用轮询策略
  • 也可以配置 Topic,让同类型的消息都在同一个 Partition。
  • 消息在不同的 Partition 是不能保证有序的,只有一个 Partition 内的消息是有序的。
    在这里插入图片描述

Kafka的基础架构

在这里插入图片描述

  • Producer:消息生产者,向Kafka中发布消息的角色。 >
  • Consumer:消息消费者,即从Kafka中拉取消息消费的客户端。
  • Consumer Group:消费者组,消费者组则是一组中存在多个消费者,消费者消费Broker中当前Topic的不同分区中的消息,消费者组之间互不影响,所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。某一个分区中的消息只能够一个消费者组中的一个消费者所消费。
  • Broker:经纪人,一台Kafka服务器就是一个Broker,一个集群由多个Broker组成,一个Broker可以容纳多个Topic。
  • Topic:主题,可以理解为一个队列,生产者和消费者都是面向一个Topic。
  • Partition:分区,为了实现扩展性,一个非常大的Topic可以分布到多个Broker上,一个Topic可以分为多个Partition,每个Partition是一个有序的队列(分区有序,不能保证全局有序)
  • Replica:副本Replication,为保证集群中某个节点发生故障,节点上的Partition数据不丢失,Kafka可以正常的工作,Kafka提供了副本机制,一个Topic的每个分区有若干个副本,一个Leader和多个Follower。
  • Leader:每个分区多个副本的主角色,生产者发送数据的对象,以及消费者消费数据的对象都是Leader。
  • Follower:每个分区多个副本的从角色,实时的从Leader中同步数据,保持和Leader数据的同步,Leader发生故障的时候,某个Follower会成为新的Leader。

工作流程

在这里插入图片描述

  • Topic是逻辑上的改变,Partition是物理上的概念,每个Partition对应着一个log文件,该log文件中存储的就是producer生产的数据,topic=N*partition;partition=log

  • Producer生产的数据会被不断的追加到该log文件的末端,且每条数据都有自己的offset,consumer组中的每个consumer,都会实时记录自己消费到了哪个offset,以便出错恢复的时候,可以从上次的位置继续消费。

  • 流程:Producer => Topic(Log with offset)=> Consumer.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷偷学习被我发现

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值