【Kafka从入门到成神系列 一】Kafka基本概述和架构

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 【Kafka从入门到成神系列 一】Kafka基本概述和架构

一、消息引擎系统

Apache Kafka 是一款开源的消息引擎系统

1. 作用

维基百科定义消息引擎系统是一组规范

  • 消息引擎传输的对象是消息
  • 如何传输消息属于消息引擎设计的一部分

kafka 消息的编码格式为:二进制的字节序列

2. 传输方法

  • 点对点模型:系统 A 发送的消息只能被系统 B 接受,其他任何系统都不能读取 A 发送的消息
  • 发布订阅模型:有一个主题(Topic)的概念,该模型有发送方和接收方。发送方被称为发布者,接收方被称为订阅者。和点对点模型不同的是,这个模型可能存在多个发布者向相同的主题发送消息,而订阅者也可能存在多个

为什么我们的系统 A 不能直接把消息发送给系统 B?

削峰填谷:缓冲上下游瞬间突发流量,使其更加的平滑。

对于发送能力比较强的上游系统,如果没有消息引擎的保护,脆弱的下游系统可能会直接被压垮,导致整个链路服务“雪崩”。

解耦:发送方和接收方松耦合,减少了系统间不必要的交互

二、Kafka术语

1. 常见术语

主题(Topic):发布订阅的对象,可以为每一个业务、每个应用甚至每类数据都创建专属的主题。

客户端(Clients)

  • 生产者(Producer):生产者不断的向一个主题或多个主题发送消息。
  • 消费者(Consumer):消费者也能够订阅多个主题的消息。

服务端:

  • Broker:一个 kafka 集群由多个 Broker 构成,Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化。将其分散运行在不同的机器,防止机器宕机,导致服务不可用。

Replication:将相同的数据拷贝到多台机器上,这些相同的数据被称为副本。副本分为 Leader 副本和 Follower 副本,Leader 副本可以进行读写操作,Follower 副本不进行读写操作,只对 Leader 副本发送请求,

  • 同步数据。
  • Partition:将每个主题分为多个分区。
  • offset:生产者和消费者的消息位移记录。

副本和分区的关系:

  • 每个分区下可以配置若 N 个副本,只能有一个 Leader 副本和 N-1 个 Follower 副本

2. Kafka 的三层消息架构

  • 第一层是主题层,每个主题可以配置 M 个分区
  • 第二层是分区层,每个分区的N个副本只能有一个充当领导者,对外提供服务;其余 N - 1 个副本是追随者副本,提供数据同步。
  • 第三层是消息层,分区中包含若干条消息,每条消息的位移从 0 开始。
  • 客户端程序只能和分区的领导者副本进行交互

3. kakfa Broker 持久化数据

kafka 使用消息日志(Log)来保存数据,一个日志就是磁盘上一个只能追加写(Append-only)消息的物理文件。

因为只能追加写入,避免了随机IO操作,改为性能较好的顺序I/O写操作,这也是实现 Kafka 高吞吐特性的一个重要手段。

kafka 会定期的删除消息以回收磁盘,通过 日志段(Log Segment)机制。一个日志被细分成多个日志段,消息写入到最新的日志段中,写满之后会自动分出一个新的日志段。

4. 消费组

多个消费者实例共同组成一个组来消费一组主题,多个消费者同时消费一组主题,提升消费端的吞吐量。

因为我们的消费者组每个消费者会自动分配相应的分区数量,当某个消费者挂掉之后,我们的 Kafka 会自动将这个实例负责的分区转移给其他的消费者。这个操作被称为:重平衡(Rebalance)

三、Kafka只是消息引擎系统吗

kafka 是消息引擎系统,也是一个分布式流处理平台(Distributed Streaming Platform)

kafka 名字的来源

因为 kafka 系统的写性能比较高,所以找了个作家的名字来命名似乎是一个好主意。大学期间上了很多的文学课,非常喜欢 Franz Kafka 这个作家。

kafka 在设计之初提供三方面的特性

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

Kafka 作为流处理平台的话,与其他大数据流式计算框架相比,优势在哪呢?

端到端的正确性:Tyler 大神曾经说过,流处理最终替代它的兄弟批处理需要具体两点核心优势:要实现正确性和提供能够推导时间的工具。实现正确性是流处理能够匹敌批处理的基石。我们的 SparkFlink  从 Kafka 读取消息进行有状态的数据计算,最终再写回 Kafka,你只能保证在 SparkFlink 内部,这条消息对于状态的影响只有一次。但是计算结果可能多次写入 Kafka,因为他们不能控制 Kafka 的语义处理。

  1. 相反,如果我们所有的数据流转和计算都在 Kafka 内部完成,就可以实现端到端的精确一次处理语义。
  2. 对于流式计算的定位官网上明确标识 Kafka Streams 是一个用于搭建实时流处理的客户端库而非是一个完整的功能系统。意味着我们的 Kafka 没有办法实现集群调度、开箱即用,需要自己选择合适的工具帮助 Kafka 实现这些功能。有些小企业不需要搭建重量级的平台,就可以直接使用 Kafka 来应对。这也是 Kafka 不正面硬钢其他流计算框架的一个方法。

四、kafka 的种类

我们知道,Linux 有不同的种类,如:CentOS、RedHat、Ubuntu等,他们都是 Linux 系统,因为不同的公司发布的 Linux 系统不同,继而被称为不同的名字。

kafka 也是一样,有不同的种类:

  1. Apache Kafka:最正宗的 Kafka
  2. Confluent Kafka:商业化 Kafka 工具开发
  3. Cloudera/Hortonworks Kafka:集成了目前主流的大数据框架,能够帮助用户实现从分布式存储、集群调度、流处理到机器学习、实时数据库等全方位的数据处理。

特点比较

  1. 1.Apache Kafka:开发人数最多、版本迭代最快的 Kafka。他缺失了一些监控框架或工具,我们可以使用第三方的框架来进行弥补。如果你仅仅需要一个消息引擎系统亦或是简单的流处理应用场景,同时需要对系统有较大把控度,那么我推荐你使用 Apache Kafka。
  2. 2.Confluent Kafka:含有跨数据中心备份和集群监控。如果你需要用到 Kafka 的一些高级特性,那么推荐你使用 Confluent Kafka。
  3. 3.CDH/HDP Kafka:大数据云公司提供的 Kafka,内嵌 Apache Kafka。优势在于操作简单,节省运维成本;缺陷在于把控度低,演进速度较慢。

五、Kafka 的版本号

我们去官网可以发现,Kafka 的版本号表现形式为:2.1.1

前面的 2 表示大版本号,中间的 1 表示小版本号,最后的 1 表示修订版本号。

kafka 的版本演进

  1. 0.7版本:提供最基础的消息队列功能
  2. 0.8版本:引入副本机制,Kafka 真正意义上成为了分布式高可靠的消息队列解决方案。
  3. 0.9版本:增加了基础的安全认证/权限功能
  4. 0.10版本:引入 Kafka Streams。从这个版本起,Kafka 正式升级成分布式流处理平台
  5. 0.11版本:提供幂等性和事务
  6. 1.0和2.0版本:kafka Steams 的各种改进。








相关文章
|
21天前
|
机器学习/深度学习 资源调度 算法
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
54 3
图卷积网络入门:数学基础与架构设计
|
1月前
|
消息中间件 缓存 架构师
关于 Kafka 高性能架构,这篇说得最全面,建议收藏!
Kafka 是一个高吞吐量、高性能的消息中间件,关于 Kafka 高性能背后的实现,是大厂面试高频问题。本篇全面详解 Kafka 高性能背后的实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
关于 Kafka 高性能架构,这篇说得最全面,建议收藏!
|
29天前
|
消息中间件 Java Kafka
实时数仓Kappa架构:从入门到实战
【11月更文挑战第24天】随着大数据技术的不断发展,企业对实时数据处理和分析的需求日益增长。实时数仓(Real-Time Data Warehouse, RTDW)应运而生,其中Kappa架构作为一种简化的数据处理架构,通过统一的流处理框架,解决了传统Lambda架构中批处理和实时处理的复杂性。本文将深入探讨Kappa架构的历史背景、业务场景、功能点、优缺点、解决的问题以及底层原理,并详细介绍如何使用Java语言快速搭建一套实时数仓。
145 4
|
1月前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
116 3
|
1月前
|
存储 监控 Linux
Docker技术架构概述
【10月更文挑战第22天】Docker采用CS架构,Client与Daemon交互,Compose管理多容器应用。
|
2月前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
38 1
|
1月前
|
消息中间件 存储 负载均衡
【赵渝强老师】Kafka的体系架构
Kafka消息系统是一个分布式系统,包含生产者、消费者、Broker和ZooKeeper。生产者将消息发送到Broker,消费者从Broker中拉取消息并处理。主题按分区存储,每个分区有唯一的偏移量地址,确保消息顺序。Kafka支持负载均衡和容错。视频讲解和术语表进一步帮助理解。
|
1月前
|
监控 API 持续交付
后端开发中的微服务架构:从入门到精通
【10月更文挑战第26天】 在当今的软件开发领域,微服务架构已经成为了众多企业和开发者的首选。本文将深入探讨微服务架构的核心概念、优势以及实施过程中可能遇到的挑战。我们将从基础开始,逐步深入了解如何构建、部署和管理微服务。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的建议。
46 0
|
18天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
27天前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
42 3

热门文章

最新文章