一、概念

1、定义

  • 是一种高吞吐的、分布式的、支持分区的、多副本的、基于ZooKeeper协调的消息系统。
  • LinkedIn贡献给apache的开源的流数据处理平台
  • 由Java和Scala编写

    2、2.x版本新变化

  • 自从0.10及以后,定位为分布式的流数据处理平台,而不是单纯的消息队列

  • 目标是大部分的公司使用其来实现告诉性能管道,流分析,数据集成等

    二、相关特性

    1、相关特性

  • 稳定性高

    • 通过O(1)的磁盘数据结构提供消息的持久化,这种结构使得既是是TB为单位的数据也能长时间的稳定存储。
  • 高吞吐量、低延迟
    • 即使是很普通的配置Kafka也能提供每秒数百万的消息,并且延迟最低只有几毫秒
  • 高并发
    • 支持数千个用户同时读写
  • 容错性好
    • 消息的负载均衡的写入与消费
    • 支持通过kafka集群的分区的存储、分布式的消费
  • 良好的支持hadoop并行计算

    • 支持Hadoop并行加载数据

      三、应用场景

    • 构造实时流数据管道,可以在系统或者应用之间可靠的获取数据。(相当于消息队列即MQ,核心作用是解耦)

    • 构建实时流式应用程序,对这些数据进行转换或者其他操作。(就是流处理)

      四、Kafka相关的术语

    • 1、Message

      • 消息,就是Kafka集群当中存储的真正的实体数据。在Kafka的角度来看一切过往数据皆Message。
    • 2、Broker
      • Kafka集群包含一个或多个服务器,这些服务器统称为Broker。
    • 3、Topic
      • 每一条发送到kafka的数据都有一个类别,即Topic。相当于给一类消息管道起的名字。
      • 物理上不同Topic的消息分开存储。但逻辑上使用丝毫不受影响。
    • 4、Partition
      • partition是物理上的概念,每个Topic有多个partition。
      • 每个partition有三个副本,可以自定义修改。
    • 5、segment
      • 每个partition有多个segment,每个segment里都存着消息。
      • partition分文件管理。避免单个文件过大的问题,并且方便快速定位message。
      • 定位segment后,根据segment的index索引和log日志文件来定位并且读取message内容。
    • 6、Producer
      • 即生产者,发送消息到broker。
    • 7、Consumer
      • 即消费者,向broker读取消息的客户端。
    • 8、发布与订阅
      • 发布:即生产者将消息发送到消息队列的过程。
      • 订阅:消费者提前规定需要的Topic。如果该topic当中有消息新增,则会主动通过消费者线程。
    • 9、Consumer Group
      • 每个Consumer属于一个特定的Consumer组。可以为其指定组。如果不指定即为默认的组。
      • 每个消费者组中的消费者共享Topic。每个消息只会被一个消费者消费。
    • 10、Offect

      • 偏移量,也成为位移。分区中的每个消息都有一个自增的id,即为pffect。它标识了分区中的消

        五、消息系统的一般语义说明

    • 三种语义定义(生产者消费者均可以使用)

      • 最多一次:可能会丢失,但不会重复投递
      • 最少一次:可能会重复,但一定能收到
      • 严格一次:不丢失,不重复,有且只会有一次发送成功。
    • 在生产者中的分析
      • 最多一次
        • 在producer发送数据时没有接受ACK应答,broker就会跳过这个发送失败的消息,该数据就会丢失,消费者也无法消费这个数据。
      • 最少一次
        • 在producer发送数据后,broker网络异常,没有返回ACK请求。 此时producer会认为消息发送失败,会再发送一条消息。这时一条数据就被重复写入了多次。
      • 严格一次
        • 生产者有且只有一次发送成功
        • 实现这种语义的方法
          • 幂等性:多次完全相同的操作,操作一次和操作多次对结果没有影响。在kafka中,每次发送数据的操作有且只有一次时成功的。
          • 分布式事务:通过分布式事务实现生产写入数据的原子性操作。
            • 事务的四大特征:原子性,一致性,隔离性,持久性。
    • 在消费者中的分析
      • 最多一次
        • 消费者先读取数据,然后提交offset确认消费记录。然后再进行处理数据。如果还没来得及处理数据就异常了,新的消费者会接下去处理。这个消息就不会被消费。
      • 最少一次
        • 消费者先处理数据,然后处理数据,最后在提交offset。如果在offset之前宕机,则认定这条消息还没有被处理,下一个消费者还是会处理。
      • 严格一次
        1. - 先读取消息,然后再提交确认,然后再处理消息,然后再提交一次确认。