Kafka快速入门1-Kafka简介
Kafka快速入门1-Kafka简介
总结概括下 Kafka 这个组件的一些基础知识点以及一些开发过程中的实践,大概分为下面这些内容:
- Kafka 简单的介绍、历史等。
- 简单的分析下 kafka 的架构,包括一些核心的术语。
- 单机版本的 kafka 安装以及使用,主要是通过 java 代码或者 python 代码来演示。
- Kafka 自带的命令行脚本的介绍,主要是讲开发过程中经常用到的一些脚本。
- Kafka 生产者的讲解,包括一些配置参数以及性能影响点。
- Kafka 消费者的讲解,包括一些配置参数以及性能影响点。
通过上面这些内容,对 Kafka 应该有个基本的了解,也算是入门了 Kafka了。
1. 消息队列是什么
消息队列可以理解为是一个缓冲区,可以往消息队列中放入消息,也可以从消息队列中取出消息。
消息队列最早是由 Unix 系统的进程间通信机制引入的,消息队列就是实现进程间通信 (IPC) 的其中一种方式。 很多软件启动后,都是会有多个进程的。每个进程负责特定的业务,然后通过操作系统的消息队列各个进程可以进行通信,协调它们的工作。
而通常我们说的消息队列一般说的是一个消息队列软件,这个软件需要独立运行。操作系统的消息队列局限于是单台服务器间的进程通信,如果是部署在多台服务器上,进程之间还是无法通过这种方式去通信。同时操作系统的消息队列没有持久化,系统重启后消息就会丢失。
在这种场景下就有了单独的消息队列软件需求,单独的消息队列软件可以用于分布式系统或者应用之间的通信。同时提供消息持久化到磁盘中,这对于企业生产应用是非常重要的特性。
2. Kafka 是什么
简介:
Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications.
Apache Kafka 是一个开源的分布式事件流平台,被许多公司用来实现高性能数据管道、流式分析、数据集成和关键任务应用。
官网的介绍 Kafka 是一个分布式事件流平台,而我们一般都会称作 Kafka 是一个消息队列。 因为大部分公司都是把 Kafka 当做消息队列使用,时间久了 Kafka 就成为消息队列的一员。
Kafka 的简单工作流程为:
- 系统 A 把消息发送到 Kafka 的 Topic 中。
- Kafka 将这些消息持久化保存起来。
- 系统 B 从指定 Kafka Topic 中读取消息并做业务逻辑处理。
关于 Kafka 这个名字的由来,作者 Jay Kreps 在 Quora 上有提及过。
I thought that since Kafka was a system optimized for writing using a writer’s name would make sense. I had taken a lot of lit classes in college and liked Franz Kafka. Plus the name sounded cool for an open source project.
So basically there is not much of a relationship.
我认为,既然 Kafka 充分优化了写操作,使用一位作家的名字是有道理的。我在大学时上过很多文学课,而且我很喜欢 Franz Kafka 。此外,Kafka 这个名字听起来很适合作为一个开源项目的名称。
所以,基本上这两者之间没有太大的关系。
3. Kafka 的特点
Kafka 在一众消息队列中这么突出,有自己比较突出的特点:
- 非常高的吞吐量,在高配的服务器中,Kafka 每秒钟可以处理数百万条数据。
- Kafka 保证毫秒级的消息传递。
- Kafka 可以很便捷的进行拓展,从一台服务器扩展到几台服务器,即使部分节点失效也能继续工作。
- Kafka 支持消息持久化存储。
4. kafka 的版本以及发展历史
Kafka 目前主要分为 3 个版本,分别是:
- Apache Kafka
- Confluent Kafka
- Cloudera/Hortonworks Kafka
至于为什么会搞出这么多个版本,要先看下 Kafka 的起源以及发展历史。
- 2010 年 Kafka 项目开始于 LinkedIn,当时的需求是构建一个高吞吐量的分布式发布订阅消息系统。
- 2011 年 Kafka 被开源,贡献给 Apache Software Foundation ,成为 Apache 项目的孵化器项目。
- 2011 年 Cloudera 开始将 Apache Kafka 集成到其大数据平台 CDH 中。
- 2012 年 年 Kafka 作为 Apache 顶级项目毕业,开始在更多公司中被采用。
- 2014 年 由 Kafka 的创始人创建 Confluent 公司,推出商业化版本。
这就是三个版本的发展史,这三个版本也是目前比较流行的版本。
4.1 Apache Kafka
这个是 Apache 社区版本的 Kafka,通常我们说的 Kafka 一般就是指这个版本。 由 Apache 基金会管理,是所有其他发行版的基础。
优势就是开发人数多,迭代速度快,社区响应及时。但是因为是开源组件,所以只提供基础组件。 缺乏高级功能如多系统连接器和监控类的工具,这些需要自行开发或集成第三方工具。
4.2 Confluent Kafka
由 Kafka 创始人创办的 Confluent 公司提供的商业化版本,分为免费版和企业版。 优势就在于企业版提供跨数据中心备份和集群监控等高级功能。
在国内支持不足,相关文档和技术支持有限,普及率较低。这家公司目前应该也没打算发展国内地区的业务。
4.3 Cloudera/Hortonworks Kafka
这个 Kafka 版本是集成在 Cloudera 的 CDH 和 Hortonworks 的 HDP 大数据平台中,简称 CDH Kafka和HDP Kafka。
操作简便,有统一的管理界面,降低运维成本,内置友好的监控界面。但是为了稳定性,版本更新滞后,无法及时获取最新的功能和修复。
5. Kafka 版本号选择
Kafka 使用三位版本号格式:Major.Minor.Patch
- Major:大版本号,表示重大功能更新。
- Minor:小版本号,表示新功能增加或改进。
- Patch:修订版本号,表示错误修复和小的改进。
在下载 Kafka 时,可能会看到像 kafka-2.11-2.1.1 这样的格式。Kafka 是使用 Scala 跟 Java 语言开发的,前面的 2.11 是 Scala 编译器版本,与 Kafka 的版本号无关。
kafka 历史版本的特性如下,资料一部分是从官网的 changelog 里面梳理出来的,有一部分是网上聚合查询出来的:
- Kafka 0.7 初始版本,提供基本的消息队列功能。
- Kafka 0.8 引入复制,Kafka Producer 和 Consumer API。
- Kafka 0.9 安全特性 SSL 和 SASL,新的消费者 API,Kafka Connect。
- Kafka 0.10 记录时间戳,Kafka Streams,跨数据中心复制。
- Kafka 0.11 幂等生产者,事务性消息,支持消息头。
- Kafka 1.0 稳定性和性能优化,支持 Java 9。
- Kafka 1.1 改进 Streams API,改进 Kafka Connect。
- Kafka 2.0 支持 TLS 1.3,增强 Kafka Streams。
- Kafka 2.1 增强副本管理,改进消费者组协调。
- Kafka 2.2 支持 Zstandard 压缩,增强动态配置更新。
- Kafka 2.3 镜像制造者 2.0,动态更新客户端日志级别。
- Kafka 2.4 增强的 Kafka Connect API,支持 SASL/OAUTHBEARER 机制。
- Kafka 2.5 TopologyTestDriver 支持,增强的错误处理。
- Kafka 2.6 增强线程安全,改进的消费者组工具。
- Kafka 2.7 增强 MirrorMaker 2.0,改进的投递保证。
- Kafka 2.8 支持 Raft 控制器,增强的授权机制。
- Kafka 3.0 计划移除 ZooKeeper 依赖,增强的 Streams API。
- Kafka 3.1 增强元数据管理,支持更多客户端协议。
参考链接
- Apache Kafka官网 https://kafka.apache.org/
- Apache Kafka 介绍 https://kafka.apache.org/intro
- Apahce Kafka 下载地址 https://kafka.apache.org/downloads
- Apache Kafka 维基 https://en.wikipedia.org/wiki/Apache_Kafka
- Apche Kafka Github 仓库 https://github.com/apache/kafka
- Kafka简介 https://zh.wikipedia.org/wiki/Kafka
- Kafka 名字的由来 https://www.quora.com/What-is-the-relation-between-Kafka-the-writer-and-Apache-Kafka-the-distributed-messaging-system