流式数据平台的三个特点
- 具备数据注入功能,类似消息系统,提供事件流的发布订阅
- 具备数据存储功能,存储事件流数据的节点具有故障容错的特点
- 具备流处理功能,能够对实时的事件流进行流式的处理和分析
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 才会返回成功