Kafka Stream介绍
kafka,KakfaStrea,流处理,Storm,streaming2016-07-20
Kafka stream。Apache Kafka开源项目的一个组成部分。是一个功能强大,易于使用的库。用于在Kafka上构建高可分布式、拓展性,容错的应用程序。它建立在流处理的一系列重要功能基础之上,比如正确区分事件事件和处理时间,处理迟到数据以及高效的应用程序状态管理。
下面的列表强调了Kafka Stream的几个关键功能,使得Kafka Stream成为构建流处理应用程序、持续查询、转换和微服务等场景的新选择。
- 功能强大
高拓展性,弹性,容错
有状态和无状态处理
基于事件时间的Window,Join,Aggergations- 轻量级
无需专门的集群
没有外部以来
一个库,而不是框架- 完全集成
100%的Kafka 0.10.0版本兼容
易于集成到现有的应用程序
程序部署无需手工处理(这个指的应该是kafka多分区机制对kafka Stream多实例的自动匹配)- 实时性
毫秒级延迟
并非微批处理
窗口允许乱序数据
允许迟到数据
在我们深入Kafka Stream的概念和架构细节以及按部就班认识Kafka Stream之前,我们先来对上面提出的列表做更多的介绍。
- 更简单的流处理:Kakfa Stream的设计目标为一个轻量级的库,就像Kafka的Producer和Consumer似得。可以轻松将kafka Stream整合到自己的应用程序中。对应用程序的额外要求仅仅是打包和部署到应用程序所在集群罢了。
- 除了Apache Kakfa之外没有任何其它外部依赖, 并且可以在任何Java应用程序中使用。不需要为流处理需求额外部署一个其它集群。操作和维护团队肯定会很高兴这一点。
- 使用Kafka作为内部消息通讯存储介质,而不是像其它流处理框架似得,重新加入其它外部组件来做消息通讯。Kafka Stream使用Kafka的分区水平拓展来对数据做有序高效的处理。这样同时兼顾了高性能,高扩展性,并使操作简便。这种决策的好处是,你不必了解和调整两个不同的消息传输层(数据在不同伸缩介质中间移动和流处理的独立消息处理层),同样,Kafka的性能和高可靠性方面的改进,都会使得Kafka Stream直接受益。也可以同时借助Kafka社区强大的开发能力。
- 允许和其他资源管理和配置共聚焦集成。因此,kafka Stream能够更加无缝的集成到现有的开发、打包、部署和业务实践当中去。你可以自由地使用自己喜欢的工具,比如java 应用服务器,Puppet, Ansible,Mesos,Yarn,Docket, 甚至在一台手工运行你自己应用程序进行验证的机器上。
- 支持本地状态容错。这样就可以进行非常高效快速的包含状态的Join和Window 聚合操作。本地状态被保存在Kafka中,在机器故障的时候,其他机器可以自动恢复这些状态继续处理。
- 每次处理一条数据以实现低延时,这对于欺诈监测等场景是至关重要的。这也是kafka Stream和其他基于微批处理的流处理框架的不同。
此外,Kafka Stream在设计上基于丰富的开发经验,具有很强的实用性。它提供了流处理所有的必要的原语,允许应用程序从kafka中读取流数据,处理数据并且将结果写回Kakfa或者发送到其他外部系统中取。提供了高层次的比如Filter,Map,Join等DSL操作以及低级别API供开发者选择使用。
最后,Kafka Stream为拓展开发者提供帮助,它入门门槛低,开发路径平滑,你可以快速编写和运行一个小规模的应用程序进行验证,因为你完全不需要安装或者了解其他分布式流处理平台。并且只需要将应用程序部署在多个实例上就可以在大批量的生产工作中实现负载均衡。Kafka Stream透明地使用Kafka并行操作模型处理同一应用程序的多个实例来实现负载均衡。
综上所述,Kafka Stream是构建流处理应用中的一个引人注目的选择,请给它一个试用的机会,并运行你的第一个Hello World流处理程序。文档的下一章将带你开始由浅入深编写Kafka Stream应用程序。
Kafka 0.10及更新版本
[可选]额外的avro schema支持: Confluent Schema Registry 3.0.0
本文是Confluent Platform 3.0版本中对于Kakfa Stream的翻译。
原文地址:https://docs.confluent.io/3.0.0/streams/index.html
看了很多其他人翻译的文档, 还是第一次翻译,有什么翻译的不好的地方还请指出。