一文读懂:Kafka(分布式消息队列)的基础概念,教程

[提前声明]
文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章
写作不易,转载请注明,谢谢!
代码案例地址: ?https://github.com/Mydreamandreality/sparkResearch


一文读懂系列:Kafka基本概念

  • 我们一般学习一个新的技能,都会经历如下这么一个阶段:
  • 这是个什么玩意啊,它能做什么啊,怎么做啊,为什么它就能做啊,哦这样啊.好厉害啊~
  • 我就按照这个顺序把kafka和spark,es给你们讲明白咯

什么是kafka?

  • Kafka准确的说是分布式消息系统
  • 要理解什么是分布式消息系统,我们要先了解它的应用场景何在

kafka的应用场景

  • 可以这么说,我们生活在一个数据大爆炸的时代,各行各业的数据大量的增长,给我们的业务带来了很大的压力,但是同时,巨大的数据也给我们带来了巨大的隐形财富

  • 那么这个时候我们就面临一个巨大的挑战

    • 如何把巨大的业务数据接入到我们的大数据分析平台,
    • 其次就是如何分析收集到的信息
  • 欸,这个时候kafka就应运而生啦

  • kafka是专为分布式高吞吐量系统设计的

  • 它的主要特性如下:

    • 应用解耦,异步消息,流量削峰,高性能,高可用,高容错,内置分区等等
  • 目前主流的分布式消息队列还有很多,比如:

    • ActiveMQ
    • RabbitMQ
    • ZeroMQ
    • 等等
    • [目前各方面综合性能最好的理论上讲是RabbitMQ]
  • 如上不同的分布式消息队列各自的适用场景都不同,它们之间详细的比较可以查看其它博主的文章


  • 我在这里举一个kafka的生产应用场景
    • 日志处理 [逻辑如下图]
    • 一文读懂:Kafka(分布式消息队列)的基础概念,教程_第1张图片
    • 首先我们有一个日志采集客户端,负责采集我们服务器的日志,每天定时的写入kafka队列中
    • kafka则负责日志数据的接受,存储,转发
    • 我们的大数据分析平台负责 订阅并且消费kafka队列中的日志数据

分布式消息系统

那么我们知道kafka的应用场景后,就很好理解分布式消息系统了

  • 分布式消息系统就是把数据从一个应用传递到另一个应用中,这样我们的程序就可以专注于数据,而不用额外的关注数据是如何共享的
  • 我们的消息[也就是数据]在应用程序和消息系统之间是异步队列

消息模式

  • 在kafka中,我们有两种类型的消费模式
    • 一:点对点模式
    • 二:发布:订阅[PUB-SUB]模式

点对点模式

  • 消息生产者把消息存到队列中,然后消费者从队列中消息消息,

  • 但是此处要注意的是:

    • 消息被消费后,队列中就不再存储这条被消费的消息
  • 点对点支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费

  • 举个简单的例子:比如在淘宝的订单系统中:

    • 商家是消息生产者:它告诉消息队列还有多少个库存
    • 我们就是消息消费者,我们去购买商家的商品
    • 这个时候一个商家订单会对应到我们每个消费者
    • 我们都可以消费这条消息,但是我消费完后你就无法再重复消费了

点对点如下图所示:
一文读懂:Kafka(分布式消息队列)的基础概念,教程_第2张图片

发布-订阅[pub-sub]

  • 消息发布者把消息发布到主题[topic]中,同时可以有多个,订阅该主题的消费者进行消费,和点对点不同的是,发布订阅一个消息可以有多个消费者一起消费

发布-订阅如下图所示
一文读懂:Kafka(分布式消息队列)的基础概念,教程_第3张图片

kafka的优势

  • 如下是几个kafka的优势,[当然还不止这些]
  • 可靠性:Kafka是分布式,分区,复制和容错的
  • 高可用:Kafka使用分布式提交日志,这意味着消息会尽可能快地保留在磁盘上,因此它是持久的
  • 性能:Kafka对于发布和订阅消息都具有高吞吐量,就算我们是TB级别数据,它也保持稳定的性能,Kafka非常快,并保证零停机和零数据丢失

后续更新下kafka在java中的应用 以及和spark大数据框架整合的代码案例


你可能感兴趣的:(一文读懂系列,kafka)