跟着锋哥学Java

深入浅出Kafka(一)之Kafka概述

1.Kafka的概述

    Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景;

 比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目

 1.1Kafka的统定义

      Kafka传 统定义:Kafka是一个分布式基于发布/订阅模式的消息队列(MessageQueue),主要应用于大数据实时处理领域。

      Kafka最 新定义 :Kafka是 一个开源的分布式事件流平台 (Event StreamingPlatform),被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用
 
       发布订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息
 
       案例1:前端埋点记录用户购买商品的行为数据(浏览、点赞、收藏、评论等)
   

     日常:Flume采集速度,小于100m/s。  11.11 活动:Flume采集速度,大于200m/s

 1.2消息队列   

    目 前企 业中比 较常 见的 消息 队列产 品主 要有 Kafka、ActiveMQ 、RabbitMQ 、RocketMQ 等。

    在大数据场景主要采用 Kafka 作为消息队列。在 JavaEE 开发中主要采用 ActiveMQ、RabbitMQ、RocketMQ

1.2.1 传统消息队列的应用场景

   传统的消息队列的主要应用场景包括:缓存/消峰、解耦和异步通信

   1.消息队列的应用场景——缓冲/消峰 :有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况

     

 

 

 

 

 

 

 

 

 

 2.消息队列的应用场景——解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束

  

 3.消息队列的应用场景——异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们

1.3 Kafka的应用场景

  1.日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

  2.消息系统解耦和生产者和消费者、缓存消息等

  3.用户活动跟踪Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

  4.运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.4消息队列的两种模式 

    1)点对点模式:消费者主动拉取数据,消息收到后清除消息

     

  2)发布/订阅模式

  1. 可以有多个topic主题(浏览、点赞、收藏、评论等)

       2.消费者消费数据之后,不删除数据;每个消费者相互独立,都可以消费到数据 

      

   1.5 Kafka基础架构

       1.5.1Kafka的基础架构

      1.为方便扩展,并提高吞吐量,一个topic分为多个partition;配合分区的设计,提出消费者组的概念,组内每个消费者并行消费

  2.为提高可用性,为每个partition增加若干副本,类似NameNode HA;ZK中记录谁是leader,Kafka2.8.0以后也可以配置不采用ZK

    

    1.5.2Kafka的基本概念

   kafka是一个分布式的,分区的消息(官方称之为commit log)服务。它提供一个消息系统应该具备的功能,但是确有着独

特的设计。可以这样来说,Kafka借鉴了JMS规范的思想,但是确并没有完全遵循JMS规范
 
    1.Producer:消息生产者,就是向 Kafka broker 发消息的客户端。
    2.Consumer:消息消费者,向 Kafka broker 取消息的客户端。
 3.Consumer Group(CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费消费者组之间互不
     影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者
     每个Consumer属于一个特定的Consumer Group,并且每个消费者Consumer都有一个group id,group id相同的多个消费者自动成为一个消费者组,一条消息可以被多个不同的Consumer Group消费,但是一个Consumer Group中只能有一个Consumer能够消费该消息
    4. Partition: 分区,为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列
    5.Broker:一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个broker 可以容纳多个 topic。
    6.Topic:可以理解为一个队列,生产者和消费者面向的都是一个 topic。
    7.Replica:副本,一个 topic 的每个分区都有若干个副本,一个 Leader 和若干个Follower;Leader 副本才能向外提供服务, Follower副本只有Leader副本挂了,通过某些规则进行选举之后,某个Follower变成了Leader之后才能才能向外提供服务
    8.Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 Leader
    9.Follower:每个分区多个副本中的“从”,实时从 Leader 中同步数据,保持和Leader 数据的同步。Leader 发生故障时,某个 Follower 会成为新的 Leader
     
服务端(brokers)和客户端(producer、consumer)之间通信通过TCP协议来完成。

posted on 2022-04-24 11:21  跟着锋哥学Java  阅读(1114)  评论(1编辑  收藏  举报

导航