栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

当你在星巴克排队,Kafka悄悄帮你“消费“--UP楠哥

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当你在星巴克排队,Kafka悄悄帮你“消费“--UP楠哥


#说在前面
当你在Youtube排队下载Trap的beats、当你在网易云音乐排队下载TeamWang的Music Album,甚至是当你在星巴克排队Coffee,这一系列的场景潜移默化的会把你拉进消息队列(MQ)的世界,与此同时,消息队列中以Kafka为代表,秉承着先进先出(FIFO)的原则,正在悄悄帮你"消费"。也就是说,当你正在排队,突然快递小哥给你打电话,告诉正在你公司等你收快递,此时尴尬的一批,好不容易快排到自己为了展示自己的高素质选择暂时离开,等拿到快递再回来的时候,原先的位置早就过号,So不得不重新排队,也就是说之前排在你后面的小姐姐们都已经买到了自己钟爱的咖啡(已在消息队列中被消费掉)。
如果对消息队列还是不够了解,请回忆UP楠哥之前唠过一篇文章《就因为是一只“兔子”?受宠爱的RabbitMQ》https://blog.csdn.net/weixin_42081313/article/details/119329304?spm=1001.2014.3001.5501,这篇文章已经较为详细的描述了消息队列的原理&工作方式;从那时起,消息队列MQ的话题已然开始,消息队列的核心就是"消费";今天再唠一唠爱“消费”的Kafka。
#什么是Kafka
Kafka最初是由linkedin公司开发的,使用Scala语言编写的,一个分布式、多分区、多副本、多订阅者的消息系统。他通常用于异常及运行日志、搜索日志、用户行为日志、监控日志、访问日志等日志系统的搭建。
Kafka目前支持多种客户端语言:Java,python,C++,php,.net等等。(Confluent.Net,LibrdKafka)
Kafka是一个分布式的发布订阅模式的消息系统,可以处理大量的数据,Kafka适合离线和在线计算,Kafka的消息保留在磁盘上,并在集群内复制以防止数据丢失。Kafka依赖Zookeeper分布式同步服务。
Kafka能与Storm、Spark、Flink、Flume等非常好的集成,用于实时流式数据分析处理。
#Why Kafka,为什么要用Kafka
Kafka的应用场景包含如下:
异步通信
应用系统解耦
耦合性高:不易维护,牵一发而动全身。
流量削峰
大部分网站系统在大部分时间的流量比较稳定。但是在搞活动,比如抢购时,秒杀的时候,流量瞬间暴涨,对系统造成了巨大的压力。如果按照流量峰值配置相应的资源,无疑是巨大的浪费。我们将流量存储在消息系统中,根据消费者能力去处理业务高峰,缓解瓶颈压力,就能起到流量削峰的作用。
系统扩展
基于发布订阅的特性,对于同一个消息,可以扩展不同的处理程序用于支持不同的业务需求。
#Kafka优势
高性能
Kafka对于发布-订阅信息具有非常高的吞吐量,即使存储了TB级别的消息,他也保持稳定的性能。
高可用
Kafka是分布式的,并且拥有分区机制,复制备份机制使得Kafka容错能力大大提升。
可扩展性
Kafka消息系统动态缩放,无需停机。(0.10版本之后)
消息持久化
大部分MQ都是走的发送-缓存-消费-删除的路线,消息在消息队列中存储的时间很短,被消费之后,消息就被删除。
然而很多时候,我们需要多个程序不同时间、不同业务场景下对消息进行多次消费,以满足我们业务需求。所以,Kafka的消息持久化特性就显得尤为突出。
#Kafka整体架构
如图所示,一个典型的Kafka集群中包含若干Producer,Broker,Consumer.
Producer发布(push)消息到Broker(消息存储代理),消费者(也是客户端程序)从broker获取数(poll),然后完成一些列对数据的处理操作。
多个Broker协同合作,Producer和Consumer部署在各个业务逻辑中被频繁调用,三者通过Zookeeper协调管理者请求和转发,这样就组成了分布式的发布订阅消息系统。
Zookeeer在kafka中的作用:
1、Broker和Topic等meta信息都存储在Zookeeper中。
2、Consumer的Offset信息也存储在Zookeeper中。
3、Borkder和Consumer以及Topic之间的订阅关系,也是存在Zookeeper中。

#Kafka相关概念
##Broker(消息代理)
  一个单独的KafkaServer就是一个Broker,Broder的主要作用就是用于接受Producer发送过来的消息,并保存到磁盘上。同时用于接受Consumer的连接,拉取消息进行消费。

##Topic(消息主题)
  Topic用于存储消息的逻辑概念,可以看做是一组消息集合。每个Topic可以有多个Producer向其中推送消息,也可以任意多个消费者消费其中的数据。

##Partition(主题分区)
  Parition是物理上的概念,每个Topic可以划分为多个Partitiion,同一个Topic的不同Partiiton存储的消息是不同的。每个Partition可以拥有多个副本,用以实现消息的冗余备份。

##Producer(生产者)
  发布消息到Kafka broker。

##Consumer(消费者)
  消息消费者,从Kafka broker读取消息。

##Consumer Group(消费者组)
  每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

#Replication和ISR
Kafka的高可靠性来源于健壮的副本机制。Kafka副本是针对Topic和Parition而言的。
可以通过kafka/config/server.propertities配置文件中的default.replication.refactor参数来设置当前topic-patition所拥有的副本数量。如下图所示:Kafka集群有四个节点,Broker1-Broder4;当前Topic1有三个分区分别为P1,P2,P3,每个分区的复制因子为3,即有三个副本。
#Consumer如何消费
当一个Consumer和Consumer Group初始化时,每个分区的Consumer一般会从最早或者最近的数据开始读,然后再从每个分区依次把消息读取出来。
消费者消费过程中,消费者会自动(或手动)提交已经成功处理的消息偏移量。
当一个分区被重新分配给组中的另一个消费者时,这个消费者会从上一个消费者最后一次提交的偏移量处开始读。保证消息被顺序消费。
Linux交流扣裙11372462进群领取技术资料,RHCE题库已更新,进群领取
#写在最后
生活的每一个细节都会成为与你工作相关联的素材,生活工作中,缺的不是素材,缺的是善于发现真善美的眼睛!IT中的PAAS技术&大数据技术中非常重要的消息队列,我们要学会好好使用,像Redis
Kafka、RabbitMQ、ActiveMQ等,都是消息队列精英,擅长“消费”!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271390.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号