【Kafka系列】(一)Kafka入门(下)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【Kafka系列】(一)Kafka入门(下)

Kafka的副本并不像MySQL那样对外提供服务

Kafka的副本(Replicas)和MySQL的副本(Replicas)在功能和设计上有一些不同,因此它们在对外提供服务方面有所不同。

  1. 「数据复制目的不同」:Kafka的副本是为了提供数据冗余和高可用性而设计的,它们用于备份主题的分区数据,以防止数据丢失。副本之间的数据同步和复制是Kafka集群的核心机制。而MySQL的副本则是为了提供数据的冗余备份和读取负载均衡而设计的,副本之间通过复制和同步来保证数据的一致性和可用性。
  2. 「数据读写方式不同」:Kafka的副本只用于读取数据,不直接对外提供写入服务。生产者将消息写入主题的分区,然后Kafka集群负责将消息复制到副本中,以提供冗余和容错能力。消费者可以从任意副本中读取数据,实现高可用性和负载均衡。而MySQL的副本是通过主从复制实现数据的读写分离,主节点负责写入操作,从节点负责读取操作。
  3. 「数据一致性要求不同」:Kafka的副本之间的数据同步是异步进行的,即主题的分区数据在写入主节点后,可能会有一些延迟才被复制到副本。这种异步复制方式可以提高Kafka的吞吐量和性能,但可能导致副本之间存在一定的数据延迟。而MySQL的副本之间的数据同步是同步进行的,确保数据在主节点写入后立即被复制到所有副本,以保证数据的一致性和可用性。

Kafka只是一个消息引擎吗?

Kafka通常被描述为一个分布式流处理平台,而不仅仅是一个消息引擎。尽管Kafka的核心功能是消息引擎,它提供了高性能、可靠的分布式消息传递,但Kafka还具备其他重要的特性和功能,使其成为一个全面的分布式流处理平台。

如果你通读全篇文字但只能记住一句话,我希望你记住的就是这句。「再强调一遍,Kafka 是消息引擎系统,也是分布式流处理平台。」

Kafka发展史

Kafka的设计历史可以追溯到2010年,当时由LinkedIn的工程师Jay Kreps、Neha Narkhede和Jun Rao共同开发和推出。

  1. 「起初的需求」:在LinkedIn,存在一个需要处理大规模数据流的问题。传统的消息队列系统无法满足其高吞吐量和低延迟的需求。因此,Jay Kreps、Neha Narkhede和Jun Rao决定自行开发一种新的解决方案。
  2. 「项目开始」:2010年,Kafka项目正式启动。最初的目标是构建一个高性能的分布式提交日志系统,用于LinkedIn内部的数据管道和实时流式处理。
  3. 「发布开源」:2011年,LinkedIn将Kafka作为开源项目发布,成为Apache软件基金会的孵化项目。这使得更多的公司和开发者开始参与和贡献Kafka的发展。
  4. 「Kafka 0.8版本」:2012年,发布了Kafka的第一个重要版本0.8。该版本引入了新的存储层设计,使用分段日志(Segmented Log)来提高吞吐量和可靠性。此外,0.8版本还引入了新的消息消费模型(Consumer Model),支持多个消费者组和消息的持久化存储。
  5. 「Kafka 0.9版本」:2015年,发布了Kafka的0.9版本。这是一个重要的里程碑,引入了Kafka的新的消费者API,增强了安全性和可靠性。此外,0.9版本还引入了Kafka Connect和Kafka Streams,使Kafka成为一个全面的流处理平台。
  6. 「Kafka 1.0版本」:2017年,发布了Kafka的1.0版本。这是一个重要的稳定版本,引入了许多改进和性能优化。1.0版本还引入了幂等写入和事务支持等重要功能,使Kafka成为更可靠和全面的分布式流处理平台。

自那时以来,Kafka持续发展和改进,不断增加新的功能和特性。它已经成为一个广泛使用的分布式流处理平台,被许多公司和组织用于构建实时数据管道、事件驱动应用程序和大规模数据处理。

言归正传,Kafka 在设计之初就旨在提供三个方面的特性:

  • 「提供一套 API 实现生产者和消费者」
  • 「降低网络传输和磁盘存储开销」
  • 「实现高伸缩性架构」

后续的文章中,我们将陆续探讨 Kafka 是如何做到以上三点的。

Kafka生态

Kafka有哪些版本?

  1. 「Apache Kafka」:这是Kafka的官方发行版,由Apache软件基金会进行维护和管理。Apache Kafka是一个开源项目,提供了稳定的版本和官方支持。
  2. 「Confluent Platform」:Confluent是一家专注于Kafka的公司,他们提供了Confluent Platform作为Kafka的一个企业级发行版。Confluent Platform在Apache Kafka的基础上扩展了一些企业级功能和工具,包括集成的Schema Registry、Kafka Connect、KSQL等。
  3. 「Cloudera Distribution Including Apache Kafka(CDH)」。CDH是Cloudera提供的一个发行版,它基于Apache Kafka,并与Cloudera生态系统中的其他工具和框架集成。CDH提供了一套集成的工具和管理界面,帮助用户更方便地部署、管理和监控Kafka集群。

Apache Kafka

对 Apache Kafka 而言,它现在依然是开发人数最多、版本迭代速度最快的 Kafka。在 2018 年度 Apache 基金会邮件列表开发者数量最多的 Top 5 排行榜中,Kafka 社区邮件组排名第二位。如果你使用 Apache Kafka 碰到任何问题并提交问题到社区,社区都会比较及时地响应你。这对于我们 Kafka 普通使用者来说无疑是非常友好的。

但是 Apache Kafka 的劣势在于它仅仅提供最最基础的组件,特别是对于前面提到的 Kafka Connect 而言,社区版 Kafka 只提供一种连接器,即读写磁盘文件的连接器,而没有与其他外部系统交互的连接器,在实际使用过程中需要自行编写代码实现,这是它的一个劣势。另外 Apache Kafka 没有提供任何监控框架或工具。显然在线上环境不加监控肯定是不可行的,你必然需要借助第三方的监控框架实现对 Kafka 的监控。好消息是目前有一些开源的监控框架可以帮助用于监控 Kafka(比如 Kafka manager)。

Confluent Kafka

下面来看 Confluent Kafka。Confluent Kafka 目前分为免费版和企业版两种。前者和 Apache Kafka 非常相像,除了常规的组件之外,免费版还包含 Schema 注册中心和 REST proxy 两大功能。前者是帮助你集中管理 Kafka 消息格式以实现数据前向 / 后向兼容;后者用开放 HTTP 接口的方式允许你通过网络访问 Kafka 的各种功能,这两个都是 Apache Kafka 所没有的。

除此之外,免费版包含了更多的连接器,它们都是 Confluent 公司开发并认证过的,你可以免费使用它们。至于企业版,它提供的功能就更多了。在我看来,最有用的当属跨数据中心备份和集群监控两大功能了。多个数据中心之间数据的同步以及对集群的监控历来是 Kafka 的痛点,Confluent Kafka 企业版提供了强大的解决方案帮助你“干掉”它们。

不过 Confluent Kafka 的一大缺陷在于,Confluent 公司暂时没有发展国内业务的计划,相关的资料以及技术支持都很欠缺,很多国内 Confluent Kafka 使用者甚至无法找到对应的中文文档,因此目前 Confluent Kafka 在国内的普及率是比较低的。

「一言以蔽之,如果你需要用到 Kafka 的一些高级特性,那么推荐你使用 Confluent Kafka。」

CDH/HDP 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版本演进

  1. 「Kafka 0.8.x系列」:这是Kafka的初始版本系列。它引入了Kafka的基本功能,如高吞吐量、持久性、分布式消息传递等。在这个系列中,Kafka引入了生产者和消费者API,以及基本的消息存储和复制机制。
  2. 「Kafka 0.9.x系列」:这个版本系列引入了一些重要的改进和新特性。其中最显著的是引入了Kafka Connect和Kafka Streams。Kafka Connect提供了可插拔的连接器,用于将Kafka与外部系统集成。Kafka Streams是一个用于构建实时流处理应用程序的库。
  3. 「Kafka 0.10.x系列」:这个版本系列引入了一些重要的改进和新特性。其中包括了Exactly-Once语义的支持,这是通过引入事务API来实现的。此外,Kafka 0.10.x还引入了Kafka Mirror Maker,用于在不同的Kafka集群之间进行数据复制和同步。
  4. 「Kafka 0.11.x系列」:这个版本系列引入了一些重要的改进和新特性。其中包括了Kafka Streams的重大改进,如窗口操作和KTable。此外,Kafka 0.11.x还引入了Kafka Admin Client,用于管理和配置Kafka集群。
  5. 「Kafka 1.0.x系列」:这个版本系列是Kafka的一个重要里程碑。它引入了许多重要的改进和新特性,包括Kafka Streams的重大改进、更好的安全性支持、更好的监控和管理工具等。
  6. 「Kafka 2.0.x系列」:这个版本系列引入了一些重要的改进和新特性。其中包括了KIP-98,引入了Exactly-Once语义的增强支持。此外,Kafka 2.0.x还引入了KRaft,这是一种新的复制协议,用于提供更强大的数据一致性保证。
相关文章
|
6月前
|
消息中间件 Java Kafka
kafka入门demo
kafka入门demo
74 0
|
6月前
|
消息中间件 分布式计算 Kafka
SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)
SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(一)
101 5
|
6月前
|
消息中间件 Java Kafka
Kafka【环境搭建 01】kafka_2.12-2.6.0 单机版安装+参数配置及说明+添加到service服务+开机启动配置+验证+chkconfig配置说明(一篇入门kafka)
【2月更文挑战第19天】Kafka【环境搭建 01】kafka_2.12-2.6.0 单机版安装+参数配置及说明+添加到service服务+开机启动配置+验证+chkconfig配置说明(一篇入门kafka)
236 1
|
6月前
|
消息中间件 存储 Kafka
Kafka【基础入门】
Kafka【基础入门】
67 1
|
6月前
|
消息中间件 存储 分布式计算
Apache Kafka-初体验Kafka(01)-入门整体认识kafka
Apache Kafka-初体验Kafka(01)-入门整体认识kafka
80 0
|
6月前
|
消息中间件 算法 Kafka
Kafka入门,这一篇就够了(安装,topic,生产者,消费者)
Kafka入门,这一篇就够了(安装,topic,生产者,消费者)
282 0
|
消息中间件 存储 Kafka
(四)kafka从入门到精通之安装教程
Kafka是一个高性能、低延迟、分布式的分布式数据库,可以在分布式环境中实现数据的实时同步和分发。Zookeeper是一种开源的分布式数据存储系统,它可以在分布式环境中存储和管理数据库中的数据。它的主要作用是实现数据的实时同步和分发,可以用于实现分布式数据库、分布式文件系统、分布式日志系统等。Zookeeper的设计目标是高可用性、高性能、低延迟,它支持多种客户端协议,包括TCP和HTTP,可以方便地与其他分布式系统进行集成。
131 0
|
消息中间件 传感器 Kafka
(三)kafka从入门到精通之使用场景
Kafka 是一种流处理平台,主要用于处理大量数据流,如实时事件、日志文件和传感器数据等。Kafka的目的是实现高吞吐量、低延迟和高可用性的数据处理。Kafka提供了一个高度可扩展的架构,可以轻松地添加和删除节点,并且能够处理数百亿条消息/分区。Kafka的消息可以容错,即使某个节点失败,消息也会在集群中的其他节点上得到处理。总的来说,Kafka 是一个非常强大的数据处理平台,可以用于实时数据处理、日志文件处理、传感器数据处理和流处理等场景。
152 0
|
消息中间件 存储 分布式计算
Spark学习---6、SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(二)
Spark学习---6、SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(二)
|
消息中间件 存储 Java
【Kafka系列】(一)Kafka入门(上)
【Kafka系列】(一)Kafka入门