zoukankan      html  css  js  c++  java
  • kafka进阶一

    kafka简介

    Kafka 2012年10月由Apache孵化。
    Kafka 是主流的消息队列组件,可以让后端服务之间轻松的相互沟通。
    kafka有一个成熟且庞大的生态圈。

    消息队列组件的比较

    Kafka使用场景

    消息:替换传统的消息系统,解耦数据生产者,缓存未处理的消息。吞吐量,内置分区,副本和故障转移
    网站活动追踪:网页游览,搜索或其他用户的操作信息,发布到不同的主题中,实时处理,实时监测,也可加载到Hadoop或离线处理数据仓库,生成用户画像。
    指标:常常用于监测数据。分布式应用程序生成的统计数据集中聚合,补丁指标。
    日志聚合:通常从服务器中收集物理日志文件,并将它们放在中央位置如文件服务器或HDFS进行处理。Kafka抽象出文件的细节,并将日志或事件数据更清晰地抽象为消息流。这允许更低延迟的处理并更容易支持多个数据源和分布式数据消费。
    流处理:消息处理一般包含多个阶段。除了Kafka Streams,还有Apache Storm和Apache Samza可选择。
    事件采集:事件采集是一种应用程序的设计风格,其中状态的变化根据时间的顺序记录下来,kafka支持这种非常大的存储日志数据的场景。

    Kafka的四个核心API

    1、应用程序使用 Producer API 发布消息到1个或多个topic(主题)中。
    2、应用程序使用 Consumer API 来订阅一个或多个topic,并处理产生的消息。
    3、应用程序使用 Streams API 充当一个流处理器,从1个或多个topic消费输入流,并生产一个输出流到1个或多个输出topic,有效地将输入流转换到输出流。
    4、Connector API 可构建或运行可重用的生产者或消费者,将topic连接到现有的应用程序或数据系统。例如,连接到关系数据库的连接器可以捕获表的每个变更。

    Kafka消息系统的基本结构

     Kafka的基础讲解- Producer&Consumer

    生产者-消费者( Producer & Consumer ):

    服务 Producer 向 Kafka 发送消息,消费者服务 Consumer 监听 Kafka 接收消息。

     

     Kafka的基础讲解-Topic

    话题(Topic):是特定类型的消息流,话题是消息的分类名,是消费者的监听目标;

     Kafka的基础讲解-consumer-group(消费者组)

    这是一组服务,扮演一个消费者。

    如果是消费者组接收消息,Kafka 会把一条消息路由到组中的某一个服务。

    kafka中消费者组有两个概念:

    队列:消费者组(consumer group)允许同名的消费者组成员瓜分处理。

    发布订阅:允许你广播消息给多个消费者组(不同名),kafka的每个topic都具有这两种模式。

    图2,仅仅是保证Topic的一个分区顺序处理,不能保证跨分区的消息先后处理顺序

    Kafka的基础讲解-Topic-消费过程

    首先,一条消息发送了。

    然后,这条消息被记录和存储在这个队列中,不允许被修改。

    接下来,消息会被发送给此 Topic 的消费者。

    但是,这条消息并不会被删除,会继续保留在队列中。

    (消息在队列中能呆多久,可以修改 Kafka 的配置)

     Kafka的基础讲解-Topic-Partitions-1

    上面 Topic 的描述中,把 Topic 看做了一个队列,实际上,一个 Topic 是由多个队列组成的,被称为【Partition(分区)】,这样可以便于 Topic 的扩展。

    生产者发送消息的时候,这条消息会被路由到此 Topic 中的某一个 Partition。

    消费者监听的是所有分区。

    生产者发送消息时,默认是面向 Topic 的,由 Topic 决定放在哪个 Partition,默认使用轮询策略。

     Kafka的基础讲解-Topic-Partitions-2

    也可以配置 Topic,让同类型的消息都在同一个 Partition。

    例如,处理用户消息,可以让某一个用户所有消息都在一个 Partition。

    例如,用户1发送了3条消息:A、B、C,默认情况下,这3条消息是在不同的 Partition 中(如 P1、P2、P3)。

    在配置之后,可以确保用户1的所有消息都发到同一个分区中(如 P1)。

    Kafka的基础讲解-Topic-Partitions-3

    图1有2个 Topic,各自有2个 Partition,这是逻辑上的形式

    图2 Topic A 和 Topic B 的所有 Partition 分布可能就是这样的

     

     

     Kafka的基础讲解-offset 

     Offset偏移量:他是由消费者来控制:正常情况当消费者消费消息的时候,偏移量也线性的的增加。但是实际偏移量由消费者控制,消费者可以将偏移量重置为更早的位置,重新读取消息。

    Offset存储:在旧版本的实现是在zookeeper上有个节点存放consumer的offset,后面考虑性能问题,kafka改到了topic里。可以自由配置是使用zookeeper还是topic。

    auto.offset.reset:kafka会根据该consumer记录的offset,传递对应消息消费,当offset不存在时,根据配置的值auto.offset.reset来决策消费方式。

     

    Kafka的基础讲解-常见问题

     kafka消息数据积压,kafka消费能力不足怎么处理

    1) 如果是kafka消费能力不足,则可以考虑增加topic的分区数,并且同时提升消费者组的消费者数量,消费者数=分区数(两者缺一不可)

    2)如果是下游的数据处理不及时:提高每批次拉取的数量,批次拉取数据过少(拉取数据/处理时间<生产速度),使处理的数据小于生产的数据,也会造成数据积压

  • 相关阅读:
    1.1获取go运行版本信息
    11.exporting 导出
    MyBatis的dao的mapper写法
    用Intellij IDEA建mybatis案例
    面向对象之多态
    this和构造器的内存分析(***)
    服务器解析请求的基本原理
    接口和抽象类的使用上的区别和选择
    intelliJ IDEA之使用svn或git管理代码
    IntelliJ IDEA的使用之调试方法
  • 原文地址:https://www.cnblogs.com/shaozhiqi/p/15806233.html
Copyright © 2011-2022 走看看