Kafka3.0文档 - 1.0 Apache Kafka介绍
在10分钟内了解kafka的一些.
什么是事件流
事件流是数字的等同于人类体内神精系统. 对于始终在线的世界kafka是技术的基基础,业务越来越多的定义软件和自动化,用软件用户也导致有更多的软件.
严格来讲,事件流是实时捕获数据的一个实践,从事件源像 数据库,传感器,手机,云服务和流事件的软件应用.存储事情流为了过后检索.操作,处理,和对事件流的反应等同于回顾,在技术需要时路由实时事件流到不同的目的地.每个事件流确保不断流动和解析数据,导致合适的信息在合适的位置,在合适的时间.
我可以用事件流做什么
事件流被应用在更广泛的例子从大量企业到组织.非常多的例子包括:
- 实时处理支付和财务交易,库存交易,银行,或保险.
- 实时跟踪和监控汽车,卡车,舰队,和运载货物,像后勤和自动化工厂.
- 从IoT装置或其它设备持续捕获或分区传感器数据,像工厂或风力发电场.
- 收集或立刻反应顾客操作或订单,像零食,旅店和旅游产业和手机应用.
- 监控医院护理病人和预测在条件下的改变来及时做紧及治疗.
- 用来连接,存储,并且确保数据被公司不同区域产生.
- 为了一个服务,数据平台基础,事件驱动架构,和微服务.
Kafka是一个事件实时平台,这是什么意思
kafka结合两个关键功能,这可以实现你使用的例子,为事件实时流,端到端用一个单独经过战斗考研的解决方案:
- 发布(写)和订阅(读)事件流,包括连接不断的从其它系统导入/导出你的数据.
- 存储事件流长久的有保障的只要你想要
- 处理事件流,当他们存在或回顾
所有这些数据被提供在分布的,高扩展,有强性,容错和安全方式.kafka可以部署到 bare-metal硬件,虚拟机,和容器,并且在云中提前定制.你可以选择在kafka自管理环境或使用全管理服务通过不同的供应商.
用简短方式解释Kafka是怎样工作的
kafka是一个分布系统,包含服务端和客户端,通信通过高性能TCP网络协议.可以部署到 bare-metal 硬件,虚拟机,和云环境中的容器中.
服务器端:kafka作为群集中一个或多个服务,可以跨越多个数据中心或云区域.一些来到存储层的服务器,被称为brokers. 其它服务器运行Kafka Connect来不断导入导出数据作为事件流来集成kafka和你已存在的系统,像关系型数据库和kafka集群. 为了让你实现核心任务使用例子,kafka集群是一个高扩展和容错性:如果任何服务器失败,其它服务器会接管他们的工作确保持续任务没有任何数据丢失.
客户端: 允许你写分布式应用程序和微服务来读,写,和并行处理事件流,在可扩容和容错性的方式,甚至在网络有问题或机器出错.kafka包含一些客户端,被扩容通过大量客户端(kafka社区提供).客户端对java,scala可用 包含更高级别的kafka streams库,对go,python,c/c++和其它语言也可以用rest api;
主要概念和术语
一条事件记录发生在实事世界或你的业务中. 在文档中它也叫记录或是消息.当你读或写数据到kafka时,你可以用事件方式来这样做.概念上来说,事件有key,值,和时间戳,和可选的头元数据.下边是事件例子:
- 事件key:“Alice”
- 事件值:Made a payment of $200 to Bob"
- 事件时间戳: “Jun. 25, 2020 at 2:06 p.m.”
生产者是那些客户端发布(写)事件到kafka,并且消费者是那些订阅(读和处理)那些事件.在kafka里,生产者和消费者是解藕的,他们彼此不知道,key设计元素到获得高性能kafka知道.例如,生产者从不需要等待消费者.kafka提供多种保证像事件处理只有一次的能力.
事件是被组织起来并保存在topics.非常简化的说,一个topic非常类似在系统中的一个文件夹,事件像文件夹中文件.一个名为 "payments"的topic.在kafka中的topic总是多个生产者和多个订阅者:一个topic可以有0个,1个或多个生成者来写事件到topic中,同时也有0个,1个或多个消费都来订阅这些事件.topic中的事件,可以被读在需要时.相反你可以定义kafka应在保存你的事件的时间,通过每个topic的配置选项,之后每个过期的事件会被丢弃.Kafka的高效性能对数据大小是恒定的,所以存储长时间的数据是完美的.
Topics是可以被分区的,意味着topic遍布于不同kafka broker上的一些“buckets”. 分布式部署你的数据是对于可扩展来说非常重要,因为允许客户端应用又读又写数据从/到不同的brokers在相同时间.当一个新事件被发布以一个topic,它实际添加一个topic分区.事件带眷相同的key(如,一个客户或车辆ID)被写到相同的分区,并且kafka保护给任何定客户总是读分区事件在精准订单是他们写的.
这个例子的topic有p1 - p4分区.两个生产都客户端在生产数据,他们两个相互独立,新的事件通过网络写入到分区.相同key(在图中他们颜色相同)的事件写入到相同分区.注意两个生产者能写数据到相同分区,如果他们的数据合适.
使你的数据具有容错并且高可用,每个topic有副本,甚至跨地区或数据中心,以至于总是有多个brokers有一个副本数据,以防出现什么坏事,你想要做维护在brokers等等.正常生产设置为3个副本,例如,你的数据总是3个副本数据.这些副本执行是在topic分区级别的.
作为初学读物这样介绍足够了.如果你感兴趣,文档中设计部分解释了Kafka各种概念的所有细节.
Kafka API
除了为管理和监控任务的命令行工具外,Kafka有5个为Java和Scala的核心API:
- Admin API用来管理和检查topics,brokers和其它Kafka对象.
- Producer API用来发布(写)事件流到一个或更多Kafka topics
- Consumer API用来订阅(读)一个或多个topics并且处理处理事件流再生成他们.
- Kafka Streams API 实现流处理应用和微服务.它提供更调味级别功能来处理事件流,包含转换,状态操作像aggregations和joins,windowing,基于事件时间的processing,等等.输入读从一个或更多topics为了生成输出一个或多个topics,高效转换输入流到输出流.
- Kafka Connect API来构建并运行复用数据导入/导出联接器,消费(读)或生产(写)事件流,并且写到扩展系统和应用,这样他们能集成kafka.例如,连接器到关系性数据库,像PostgreSQL可能获得一组表的每次改变.虽然这样,在实践中,你一般不需要实现你自己的连接器,因为kafka社区已经提供了数百个可用的连接器.