物联网云平台开发武器库 https://www.yuque.com/shizhiy...前端
咱们谈了 Kafka 当前的定位问题,Kafka 再也不是一个单纯的消息引擎系统,而是可以实现精确一次(Exactly-once)处理语义的实时流处理平台。数据库
你可能据说过 Apache Storm、Apache Spark Streaming 亦或是 Apache Flink,它们在大规模流处理领域可都是响当当的名字。使人高兴的是,Kafka 通过这么长时间不断的迭代,如今已经可以稍稍比肩这些框架了。我在这里使用了“稍稍”这个字眼,一方面想表达Kafka 社区对于这些框架心存敬意;另外一方面也想表达目前国内鲜有大厂将 Kafka 用于流处理的尴尬境地,毕竟 Kafka 是从消息引擎“半路出家”转型成流处理平台的,它在流处理方面的表现还须要通过时间的检验。网络
若是咱们把视角从流处理平台扩展到流处理生态圈,Kafka 更是还有很长的路要走。前面我提到过 Kafka Streams 组件,正是它提供了 Kafka 实时处理流数据的能力。可是其实还有一个重要的组件我没有说起,那就是 Kafka Connect。
咱们在评估流处理平台的时候,框架自己的性能、所提供操做算子(Operator)的丰富程度当然是重要的评判指标,但框架与上下游交互的能力也是很是重要的。可以与之进行数据传输的外部系统越多,围绕它打造的生态圈就越牢固,于是也就有更多的人愿意去使用它,从而造成正向反馈,不断地促进该生态圈的发展。就 Kafka 而言,Kafka Connect 经过个个具体的链接器(Connector),串联起上下游的外部系统。架构
整个 Kafka 生态圈以下图所示。值得注意的是,这张图中的外部系统只是 Kafka Connect组件支持的一部分而已。目前还有一个可喜的趋势是使用 Kafka Connect 组件的用户愈来愈多,相信在将来会有愈来愈多的人开发本身的链接器。框架
说了这么多你可能会问这和今天的主题有什么关系呢?其实清晰地了解 Kafka 的发展脉络和生态圈现状,对于指导咱们选择合适的 Kafka 版本大有裨益。下面咱们就进入今天的主题——如何选择 Kafka 版本?运维
咦? Kafka 不是一个开源框架吗,什么叫有几种 Kafka 啊? 实际上,Kafka 的确有好几种,这里我不是指它的版本,而是指存在多个组织或公司发布不一样的 Kafka。你必定据说过Linux 发行版吧,好比咱们熟知的 CentOS、RedHat、Ubuntu 等,它们都是 Linux 系统,但为何有不一样的名字呢?其实就是由于它们是不一样公司发布的 Linux 系统,即不一样的发行版。虽然说在 Kafka 领域没有发行版的概念,但你姑且能够这样近似地认为市面上的确存在着多个 Kafka“发行版”。
下面我就来梳理一下这些所谓的“发行版”以及你应该如何选择它们。固然了,“发行版”这个词用在 Kafka 框架上并不严谨,但为了便于咱们区分这些不一样的 Kafka,我仍是勉强套用一下吧。不过切记,当你之后和别人聊到这个话题的时候最好不要说起“发行版”这个词 ,由于这种提法在 Kafka 生态圈很是陌生,说出来不免贻笑大方。机器学习
Apache Kafka 是最“正宗”的 Kafka,也应该是你最熟悉的发行版了。自 Kafka 开源伊始,它便在 Apache 基金会孵化并最终毕业成为顶级项目,它也被称为社区版 Kafka。我们就是以这个版本的 Kafka 做为模板来学习的。更重要的是,它是后面其余全部发行版的基础。也就是说,后面提到的发行版要么是原封不动地继承了 Apache Kafka,要么是在此之上扩展了新功能,总之 Apache Kafka 是咱们学习和使用 Kafka 的基础。分布式
对 Apache Kafka 而言,它如今依然是开发人数最多、版本迭代速度最快的 Kafka。在2018 年度 Apache 基金会邮件列表开发者数量最多的 Top 5 排行榜中,Kafka 社区邮件组排名第二位。若是你使用 Apache Kafka 碰到任何问题并提交问题到社区,社区都会比较及时地响应你。这对于咱们 Kafka 普通使用者来讲无疑是很是友好的。
可是 Apache Kafka 的劣势在于它仅仅提供最最基础的组件,特别是对于前面提到的Kafka Connect 而言,社区版 Kafka 只提供一种链接器,即读写磁盘文件的链接器,而没有与其余外部系统交互的链接器,在实际使用过程当中须要自行编写代码实现,这是它的一个劣势。另外 Apache Kafka 没有提供任何监控框架或工具。显然在线上环境不加监控确定是不可行的,你必然须要借助第三方的监控框架实现对 Kafka 的监控。好消息是目前有一些开源的监控框架能够帮助用于监控 Kafka(好比 Kafka manager)。
总而言之,若是你仅仅须要一个消息引擎系统亦或是简单的流处理应用场景,同时须要对系统有较大把控度,那么我推荐你使用 Apache Kafka。工具
我先说说 Confluent 公司吧。2014 年,Kafka 的 3 个创始人 Jay Kreps、NahaNarkhede 和饶军离开 LinkedIn 创办了 Confluent 公司,专一于提供基于 Kafka 的企业级流处理解决方案。2019 年 1 月,Confluent 公司成功融资 D 轮 1.25 亿美圆,估值也到了 25 亿美圆,足见资本市场的青睐。性能
这里说点题外话, 饶军是咱们中国人,清华大学毕业的大神级人物。咱们已经看到愈来愈多的 Apache 顶级项目创始人中出现了中国人的身影,另外一个例子就是 Apache Pulsar,它是一个以战胜 Kafka 为目标的新一代消息引擎系统。至于在开源社区中活跃的国人更是数不胜数,这种现象实在使人振奋。还说回 Confluent 公司,它主要从事商业化 Kafka 工具开发,并在此基础上发布了Confluent Kafka。Confluent Kafka 提供了一些 Apache Kafka 没有的高级特性,好比跨数据中心备份、Schema 注册中心以及集群监控工具等。
下面来看 Confluent Kafka。Confluent Kafka 目前分为免费版和企业版两种。前者和Apache Kafka 很是相像,除了常规的组件以外,免费版还包含 Schema 注册中心和 RESTproxy 两大功能。前者是帮助你集中管理 Kafka 消息格式以实现数据前向 / 后向兼容;后者用开放 HTTP 接口的方式容许你经过网络访问 Kafka 的各类功能,这两个都是 ApacheKafka 所没有的。
除此以外,免费版包含了更多的链接器,它们都是 Confluent 公司开发并认证过的,你能够无偿使用它们。至于企业版,它提供的功能就更多了。在我看来,最有用的当属跨数据中心备份和集群监控两大功能了。多个数据中心之间数据的同步以及对集群的监控从来是Kafka 的痛点,Confluent Kafka 企业版提供了强大的解决方案帮助你“干掉”它们。
不过 Confluent Kafka 的一大缺陷在于,Confluent 公司暂时没有发展国内业务的计划,相关的资料以及技术支持都很欠缺,不少国内 Confluent Kafka 使用者甚至没法找到对应的中文文档,所以目前 Confluent Kafka 在国内的普及率是比较低的。
一言以蔽之,若是你须要用到 Kafka 的一些高级特性,那么推荐你使用 Confluent Kafka
Cloudera 提供的 CDH 和 Hortonworks 提供的 HDP 是很是著名的大数据平台,里面集成了目前主流的大数据框架,可以帮助用户实现从分布式存储、集群调度、流处理到机器学习、实时数据库等全方位的数据处理。我知道不少创业公司在搭建数据平台时首选就是这两个产品。不论是 CDH 仍是 HDP 里面都集成了 Apache Kafka,所以我把这两款产品中的Kafka 称为 CDH Kafka 和 HDP Kafka。固然在 2018 年 10 月两家公司宣布合并,共同打造世界领先的数据平台,也许之后 CDH和 HDP 也会合并成一款产品,但能确定的是 Apache Kafka 依然会包含其中,并做为新数
据平台的一部分对外提供服务。
大数据云公司发布的 Kafka(CDH/HDP Kafka)。这些大数据平台自然集成了 Apache Kafka,经过便捷化的界面操做将 Kafka 的安装、运维、管理、监控所有统一在控制台中。若是你是这些平台的用户必定以为很是方便,由于全部的操做均可以在前端 UI 界面上完成,而没必要去执行复杂的 Kafka 命令。另外这些平台提供的监控界面也很是友好,
你一般不须要进行任何配置就能有效地监控 Kafka。可是凡事有利就有弊,这样作的结果是直接下降了你对 Kafka 集群的掌控程度。毕竟你对下层的 Kafka 集群一无所知,你怎么能作到心中有数呢?这种 Kafka 的另外一个弊端在于它的滞后性。因为它有本身的发布周期,所以是否能及时地包含最新版本的 Kafka 就成为了一个问题。好比 CDH 6.1.0 版本发布时 Apache Kafka 已经演进到了 2.1.0 版本,但 CDH中的 Kafka 依然是 2.0.0 版本,显然那些在 Kafka 2.1.0 中修复的 Bug 只能等到 CDH 下次版本更新时才有可能被真正修复。
简单来讲,若是你须要快速地搭建消息引擎系统,或者你须要搭建的是多框架构成的数据平台且 Kafka 只是其中一个组件,那么我推荐你使用这些大数据云公司提供的 Kafka
咱们今天讨论了不一样的 Kafka“发行版”以及它们的优缺点,根据这些优缺点,咱们能够有针对性地根据实际需求选择合适的 Kafka。下一期,我将带你领略 Kafka 各个阶段的发展历程,这样咱们选择 Kafka 功能特性的时候就有了依据,在正式开启 Kafka 应用之路以前也夯实了理论基础。
最后咱们来复习一下今天的内容: