kafka是什么?

Kafka是一个高吞吐量的分布式消息队列,常用于大数据实时处理。它提供了解耦、可恢复性、缓冲、削峰和异步通信的好处。Kafka支持点对点和发布/订阅两种模式,消息存储在本地文件并定期清理。其基本架构包括基于Zookeeper的集群管理,以及消费者组和分区的机制来确保高可用性和一致性。
摘要由CSDN通过智能技术生成

Hadoop生态体系-Kafka

概述

kafka是什么?

Kafka是一个分布式的基于发布/订阅模式 1(一对多)的消息队列2。读写速度快,吞吐量高,所以主要应用于大数据实时处理,比如秒杀场景。

消息队列

好处

1.解耦:允许你独立的扩展或修改两边的处理过程:比如对接Flume在其中的拦截器可以实现个性化定制,只需要他们保证遵守同样的接口规范
2.可恢复性:系统的一部分组件失效时,不会影响到整个系统。ack机制,防止处理消息的线程挂掉,在系统恢复后可以重新消费
3.缓冲:比如秒杀场景,瞬间有百万条消息同时请求服务器,这时先进入消息队列,排好队,先进先出,再读到后台系统处理。解决生产数据和消费数据速率差别巨大问题
就像去做核酸,全县的人在早上都去了,一时间广场人就满了,总不能一拥而上的做,一个人说我先来的,另一个人我先来的…所以就要排队(消息队列的结构就是先进先出,是一个有序的队列),有先来后到的序号,这样就不会乱,做了缓冲
4.削峰:面对这种突发的流量并不常见(比如微博的服务器),如果以能处理的峰值大小作为标准投放资源,无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求 而完全崩溃。
5.异步通信:将消息存放于消息队列,并不立即处理,需要的时候再去处理

两种模式
  • 点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)
    对于一个消息而言只会被一个消费者消费一次
  • 发布/订阅(subscribe)模式(一对多,消费者消费数据之后不会清除消息)
    kafka中生产者发布消息到某个主题的队列,所有订阅该主题的消费者都能够消费到这个里边的消息。这些消息保存到本地文件,每七天自动清理一次,类似的场景就像微信公众号,不会说某一个订阅过此公众号的人看完新发布后的一片文章,这篇文章就没了,其他订阅者照样能消费
  • kafka中消费者消费数据的方式:
    推:主题主动每次有新消息产生,统一给每一个消费者以相同速率推送消息。而每一个消费者消费速率又不一样,只能保证最低的消费速率的情况下去推送,会让消费能力强的机器产生资源浪费。
    拉:消费者主动去主题拉取新消息,这样满足每个消费者的消费水平。但是也会产生问题,消费者不知道到底有没有新消息产生,如果没有新消息,就会白跑。正常的生成环境会产生源源不断的新消息,这种情况就也会避免。

kafka基本架构

kafka结构图

  • kafka是分布式部署所以也是集群管理的,集群间的相互通信基于zookeeper集群(高版本2.8.0独立于zookeeper)。
  • 每一个topic(生产和消费消息都是面向topic的,具体点是每一个topic的每一个分区的leader)(Queen)可以分区存储,每个分区都有多个follower和一个leader副本机制保证高可靠。
  • 消费者是没有个人的概念,都是以消费者组(CG)去消费(就算只有一个消费者也是以消费者组的名义去消费数据,原因就是offset的维护),消费者组内多个消费者可以对应分区消费
  • 如果消费者组和分区数量对应不起来,遵循两个原则。zookeeper的作用将集群机器组织起来,让它们能互相通信,通过类似HA的锁机制,选出集群的leader。
    一个消费者组内的一个消费者可以同时消费一个topic中多个分区的消息.
    一个Topic中的一个分区的消息同时只能被一个消费者组中的一个消费者消费
  • 在kafka内部会自动有一个topic来维护消费者的offset消费记录(偏移量:GTP通过group(以消费者组去维护原因:如果以消费者去维护,下一次消费还是这个消费者就没有问题,但是换了一个消费者就出问题了,不知道上一个消费者是谁,就找不到记录,就无法继续消费),topic,partition来维护)

  1. 类似微信公众号,多个用户订阅后,相当于消费者,消费消息队列,公众号的维护者是发布消息,就是生产者,生产消息队列。每当有新消息到队列后,凡是订阅过的人就都会收到此消息。再有一个常见场景就是主播订阅,凡是订阅过该主播的粉丝都会在直播开播时收到消息,提醒你喜欢的主播开播了,快来观看他,典型的一对多模式,当一的状态改变,多就会收到消息消费消息作出变化。 ↩︎

  2. 消费者消费数据之后不会清除消息
    消息:各种各样的数据
    消息队列:从本质上说消息对列就是一个队列结构的中间件,也就是说消息放入这个中间件之后就可以直接返回,并不需要系统立即处理,而另外会有一个程序读取这些数据,并按顺序进行逐次处理 (好像做了一个缓冲和中转的感觉),实现数据的一对多处理,异步消费。
    大数据领域的消息队列就是kafka。传统领域的消息队列有RocketMR,RabbitMQ,ZeroMQ。 ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值