(一)什么是envent stream?
事件流是指事件以流的形式从事件源(如数据库,传感器,移动设备,云服务,软件应用程序)实时捕获数据,将这些事件流持久存储起来。之后可以查看,操作,处理,对事件作出及时性或回顾性的相应以及根据需要将是数据路由到不同的目的地。因此,事件流可以确保数据的连续流动和解释,从而使正确的信息在正确的时间,地点出现在正确的位置。
(二)event stream可以做什么?
1.实时处理付款和金融交易,例如在证券交易所,银行和保险中
2.实时跟踪和监视汽车,卡车,车队和货运,例如物流和汽车行业
3.从工厂和风电场等物理联网设备或其他设备连续捕获和分析传感器数据
4.收集并立即响应客户的交互和订单,例如在零售,酒店和旅行行业以及移动应用程序中
5.监测住院病人并预测病情变化,以确保在紧急情况下及时得到治疗
6.连接,存储和提供公司不同部门产生的数据
7.用作数据平台,时间驱动的体系结构和微服务的基础
(三)kafka作为事件流平台,提供哪些功能?
1.发布(写入)和订阅(读取)事件流,包括从其他系统连续导入/导出数据。
2.根据需要持久而可靠地存储事件流。
3.处理事件流的发生或追溯。
注:所有这些功能都是以分布式、高度可扩展、弹性、容错和安全的方式提供的。Kafka可以部署在裸机硬件、虚拟机和容器上,也可以部署在本地和云中
(四)kafka如何工作?
Kafka是一个分布式服务器,由通过高性能TCP网络协议进行通信的服务器和客户端组成。它可以部署在内部以及云环境中的裸机硬件,虚拟机和容器上。
服务器:Kafka是作为一个或多个服务器的集群运行的,这些服务器可以跨越多个数据中心或云区域。其中一些服务器构成了存储层,称为代理。其他服务器运行Kafka Connect以事件流的形式连续导入和导出数据,以便将Kafka与现有系统(如关系数据库以及其他Kafka集群)集成。为了让您实现任务关键型的用例,Kafka集群具有高度的可伸缩性和容错性:如果它的任何一台服务器发生故障,其他服务器将接管它们的工作,以确保连续运行而不丢失任何数据。
客户端:允许编写分布式应用程序和微服务,以并行、大规模和容错的方式读取、写入和处理事件流,即使在网络问题或机器故障的情况下也是如此。kafka ships包括一些这样的客户,这是由kafka社区提供的几十个客户端扩充的:客户端可以用于java和scala,包括更高级别的kafka流库,如GO、Python、C/C++、以及许多其他编程语言以及REST API。
(五)kafka里面的一些概念
1.event 事件:一个事件记录了“发生了什么”,当我们通过kafka读或写数据时,是以事件的形式来做,事件包括key,value,事件戳以及可选的元数据头,例子如下
- Event key: "Alice"
- Event value: "Made a payment of $200 to Bob"
- Event timestamp: "Jun. 25, 2020 at 2:06 p.m."
2.producer 生产者:就是往kafka里发布(写)事件的客户端应用。
3.consumer 消费者:就是从kafka中订阅(读,处理)事件的客户端应用。(producer和consumer互相是完全解耦,不可知的,他们不知道对方的存在,这是kafka高扩展性的关键)
4.topics 主题:event有组织的并且持久的存储在topic中。topic类似于文件系统的文件夹,event就是文件夹中的文件。一个topic有0个或多个producer,可以有0个或多个consumer。topic中的事件可以根据需要随时读取不同于传统的消息传递系统,event在使用后不会被删除。相反,您可以通过每个topic的配置设置来定义Kafka应该保留多长时间的事件,之后旧事件将被丢弃。Kafka的性能在数据大小方面是恒定的,因此长时间存储数据是非常好的。topic是分区的,以为这一个topic被分散在位于不同kafka brokers的多个bucket上。数据的这种分布式放置对于可伸缩性非常重要,因为它允许客户端应用程序同时从多个代理读取和写入数据。当一个新事件发布到一个topic时,它实际上被附加到主题的一个分区中。具有相同事件键(例如,客户或车辆ID)的事件被写入同一个分区,Kafka保证给定topic分区的任何使用者将始终以与写入时完全相同的顺序读取该分区的事件。为了使数据具有容错性和高可用性,可以复制每个topic,一般建议复制3份。