流式数据平台的三个特点

  • 具备数据注入功能,类似消息系统,提供事件流的发布订阅
  • 具备数据存储功能,存储事件流数据的节点具有故障容错的特点
  • 具备流处理功能,能够对实时的事件流进行流式的处理和分析

Kafka 如何实现这三个特点?

消息系统

  • Kafka 使用 Consumer Group (消费组) 统一了队列和发布-订阅这两种消息模型

  • 使用队列模型时,将处理工作平均分配给消费组中的成员

  • 多个消费者读取,每条消息只发给一个消费者,如每个消费者的消费组名称都相同

  • 使用发布-订阅模型时,将消息广播给多个消费组

  • 多个消费者订阅主题,每条消息会发布给所有消费者,如每个消费者的消费组名称都不同

  • 消费组结合多个消费者,线性扩展消息的处理能力,消息也可以被多个消费组订阅

存储系统

  • 数据写入 Kafka 集群的时候,还会复制多份来保证出现故障时仍能使用,ack 机制可用保证消息都写入

流处理系统

  • Kafka 提供了完整的流处理 API,同时内部解决了很多乱序和迟到的数据、重新处理输入数据、窗口和状态操作等

核心 API

  • 生产者 producer:应用程序发布事件流到 Kafka 的一个或多个 topic
  • 消费者 consumer:应用程序订阅 Kafka 的一个或多个 topic,并处理事件流
  • 连接器 connector:将 Kafka topic 和已有的数据进行连接,数据可以相互导入导出
  • 流处理 processor:从 Kafka topic 消费输入流,经过处理后,产生输出流到输出 topic

Kafka 的 ack 机制

ack = 0 时,不需要确认是否送达
ack = 1 时,需要将消息写入 Leader replica 时才会返回成功
ack = -1 时,将消息写入 Leader replica 后还需要将消息复制到 Follower replica 才会返回成功