1.1 介绍
什么是 event streaming
技术上来说, 事件流是一种基于实时从事件源抓取数据的实践, 事件源像数据库, 感应器, 移动设备, 云服务和事件流形式的软件应用. 持久化存贮这些事件流以备之后拿来用. 实时地、可追溯地对事件流操作, 执行以及做出应对. 并根据需要将事件流路由到不同的目标技术. 事件流因此确保了数据的持续流动和解读, 让正确的数据在正确的时间出现在正确的位置上.
event streaming 可以用来做什么
- 实时执行付款和金融交易, 证券交易所、银行、和保险
- 实时跟踪监控汽车,卡车,舰队和船只, 后勤和汽车行业
- 持续抓取分析IOT设备或其他设备的传感器数据 工厂,风电场
- 收集并实时反馈用户的交互和订单信息 零售,旅馆和旅游业 和 移动应用
- 监控健康护理中的病人的状态以及预测病情变化以确保紧急情况下的及时治疗
- 链接, 存储 并且获取公司不同部门的数据
- 以数据平台、事件驱动架构和微服务的形式提供服务
kafka 是一个 event streaming 平台
kafka 包含三种关键功能
- 发布订阅事件流, 包括持续的从其他系统中导入导出数据
- 持久地、可靠地存储事件,想存多久存多久
- 处理事件流的发生,或者追溯时间的发生
可以以分布式,高扩展性,高弹性,高容错和高安全的方式提供以上功能. 可以部署在任何地方,可以用环境变量的形式管理,也可以用各种的供应商提供全部的管理服务。
简单说明 kafka 工作方式
通过高性能的 TCP 网络协议进行服务端和客户端的交互。
Server:Kafka是作为一个集群运行的一个或多个服务器,可以跨多个数据中心或云区域。这些服务器中的一些形成了存储层,称为broker
(代理)。其他服务器运行Kafka连接,以事件流的形式不断导入和导出数据,将Kafka与现有系统集成,如关系数据库和其他Kafka集群。为了让你实现关键任务的用例,Kafka集群是高度可扩展和容错的:如果它的任何一个服务器故障,其他服务器将接管他们的工作,以确保不丢失任何数据的连续操作。
Client: 它们允许您编写分布式应用程序和微服务,以并行、大规模、容错的方式读取、写入和处理事件流,即使在出现网络问题或机器故障的情况下也是如此。Kafka附带了一些这样的客户端,这些客户端被Kafka社区提供的几十个客户端扩展:客户端在Java和Scala可用并且包括高级的Kafka Stream 库,在Go, Python, C/ c++,以及许多其他编程语言也有 Rest Api可用。
关键概念和术语
事件具有键,值,时间戳和可选的元数据Header。
Producers 是将event publish到kafka的客户端。
Consumers 是读取消费event的客户端
Event 以 topic的形式组织构成以及持久化存储。 简单说, topic 就像一个文件夹, event就是 这个文件夹里的文件。 event可以按任何频次需要进行读取, 而且读取后也不会删除。 取而代之的是需要定义每个topic存储 event的有效时间。kafka的性能和数据大小没有关系, 所以可以存储任意有效期的数据。
一个topic 可能跨多个区块存储于不同的broker里面。 数据的分布式放置对于可伸缩性非常重要,因为它允许客户机应用程序同时从多个 broker 读取和写入数据。当一个新事件被发布到一个topic时,它实际上被附加到该topic的一个分区中。具有相同事件key的事件被写入到相同的分区,Kafka保证任何给定topic-分区的消费者总是会按照写入的顺序读取该分区的事件。
为了确保数据容错性和高可用, 每个topic都是可以被复制的, 即使是在不同地域或者数据中心的情况下。这样就是说永远需要有多个broker, 这些broker都有一份备份的数据,以防出现问题,或者需要维护kafka的情况。生产推荐的备份的数量设为3.备份是基于topic分区的。
kafka Apis
Admin Api: 管理检视topic, broker, kafka其他的对象
Producer Api: publish 事件流
Consumer Api: 从一个或者多个topic读取执行事件流
Kafka Stream Api: 实现了流处理的应用程序和微服务。可以对event stream 进行基于event时间的转换,有状态的操作(像聚合、join), 窗口化等等。从一个或多个topic读取然后输出到一个或多个topic. 有效的将输入流转换为输出流。
Kafka Connect Api:创建一个可复用的数据导入导出connector,connector从外部系统或者应用读取事件流或者生成事件流到外部应用中去。举例来说 connector可以从关系数据库PostgreSql抓取一组table的每次变化。kafka社区提供上百种connector, 大多情况下不用自己去实现一个connector。
1.2 应用
Messaging
作为消息队列, kafka有更好的吞吐量,内置的分区,副本,和容错性。
网站活动记录
活动跟踪的记录量通常非常大,因为会为每个用户页面视图生成许多活动消息
Metrics
操作记录的监控数据,聚合不同的应用创建操作记录的集中化反馈
日志聚合
流处理
爬取 rss news articles => article topic => 去重格式化 => cleaned article topic => .......
从一个topic读取,处理之后写入另外一个topic
event source
可容纳大体量的日志数据
提交记录
功能类似于 BookKeeper 记录数据变更的每次提交记录, 以备数据节点之间的进行差异同步。
1.3 Quick start
1.4 Kafka 生态
ecosystem page 列举了 集成Kafka 的工具。