02、Kafaka 简介

news2024/11/24 12:42:13

02、Kafka 简介

1、 Kafka 简介

Apache Kafka 是一个分布式的发布-订阅消息系统,最初由 LinkedIn 公司开发,并在 2010 年贡献给了 Apache 软件基金会,成为一个顶级开源项目。Kafka 设计之初是为了满足高吞吐量、可扩展性、持久性、容错性以及高并发的需求,它非常适合用于实时数据流的处理,包括日志聚合、事件源、流式处理等场景。

Kafka 的架构包括以下几个关键组件:

  1. 生产者(Producer):负责发布消息到 Kafka 的主题(Topic)。
  2. 消费者(Consumer):订阅一个或多个主题,并从 Kafka 集群中拉取(Pull)数据进行消费。
  3. Broker:Kafka 集群中的服务器,负责存储生产者写入的消息。
  4. 主题(Topic):Kafka 中的消息分类,每个主题可以分成多个分区(Partition)以支持数据的水平扩展和并行处理。
  5. 分区(Partition):是主题的一个子集,可以分布在不同的 Broker 上以实现负载均衡。
  6. 副本(Replica):为了保证数据的可靠性,每个分区都有多个副本,其中一个是领导者(Leader),其他的是追随者(Followers)。
  7. ZooKeeper:Kafka 集群依赖 ZooKeeper 来管理集群中的节点状态、分区状态以及副本状态。

Kafka 的主要特点包括:

  • 高吞吐量和低延迟:Kafka 能够以极低的延迟处理高吞吐量的数据。
  • 持久性和可靠性:消息被持久化到磁盘,并且支持数据备份以防止数据丢失。
  • 可扩展性:Kafka 集群支持热扩展,可以轻松添加更多的 Broker 来扩展系统。
  • 容错性:允许集群中的节点失败而不会丢失数据。
  • 高并发:支持数千个客户端同时读写。

Kafka 常用于以下场景:

  • 日志收集:集中收集各种服务的日志,提供统一的日志分析接口。
  • 消息系统:解耦生产者和消费者,提供异步处理能力。
  • 用户活动跟踪:记录用户的各种活动,如浏览、搜索、点击等,供实时监控分析或离线分析挖掘。
  • 流式处理:与如 Spark Streaming 和 Storm 等流处理系统结合使用。
  • 事件源:作为事件源,记录系统中发生的所有事件。

Kafka 的设计思想和架构使其成为了大数据处理领域中一个非常流行的工具。

2、 Kafka 的设计目标

Kafka 的设计目标主要围绕以下几个核心点:

  1. 高吞吐率:Kafka 旨在实现高吞吐量的消息处理,即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条以上消息的传输。
  2. 消息持久化:Kafka 提供了以时间复杂度为 O(1) 的方式进行消息持久化的能力,保证了对 TB 级以上数据也能保证常数时间复杂度的访问性能。
  3. 完全分布式:Kafka 支持消息分区以及分布式消费,并保证分区内的消息顺序,同时支持 Producer、Broker、Consumer 的水平扩展。
  4. 同时支持在线和离线数据处理:Kafka 能够同时满足实时数据处理和离线批处理的需求。
  5. 在线水平扩展(Scale out):Kafka 支持在线水平扩展,可以轻松地通过增加更多的服务器来扩展系统。
  6. 容错性:Kafka 通过副本和分区机制提供了容错性,能够在出现机器故障时保证系统的可靠性和数据的不丢失。
  7. 高并发:Kafka 支持数千个客户端同时读写,适合大规模分布式系统。
  8. 解耦和扩展性:Kafka 允许系统的不同组件以消息为中心进行通信,从而实现解耦,同时提供了系统的可扩展性。
  9. 端到端的精确处理:Kafka 通过与外部存储系统的协作,提供了端到端的精确一次处理语义(Exactly once),尽管这通常需要额外的机制来实现。
  10. 灵活性和峰值处理能力:Kafka 能够使关键组件顶住突发的访问压力,同时保持系统的灵活性。

Kafka 的设计哲学和目标使其成为了一个在大数据处理领域非常流行的工具,尤其适用于需要高吞吐量、数据持久化和分布式系统的场景。

3、 Kafka 的核心概念

image-20240506112254438

Kafka 的核心概念包括以下几个方面:

  1. 生产者(Producer)
    • 负责创建和发送消息到 Kafka 集群中的特定主题。
  2. 消费者(Consumer)
    • 从 Kafka 集群中的主题拉取(pull)消息进行处理。
  3. Broker
    • Kafka 集群中的一个节点,负责维护和管理消息数据。
  4. 主题(Topic)
    • 消息的分类单位,生产者将消息发送到主题,消费者从主题读取消息。
  5. 分区(Partition)
    • 主题可以被划分为一个或多个分区,以支持大规模数据的并行处理和负载均衡。
  6. 副本(Replica)
    • 为了提高消息的可靠性,每个分区都有多个副本,其中一个副本是领导者(Leader),其他副本是追随者(Followers)。
  7. 领导者(Leader)
    • 分区中的一个副本作为领导者,负责处理所有对该分区的读写请求。
  8. 追随者(Follower)
    • 分区中的其他副本作为追随者,复制领导者中的数据以提供冗余。
  9. ZooKeeper
    • Kafka 集群使用 ZooKeeper 来管理集群的元数据以及进行领导者选举等操作。
  10. 消费组(Consumer Group)
    • 消费者可以组成一个组,以便能够并行地消费消息。每个分区只能由消费组中的一个消费者消费。
  11. 消息(Message)
    • Kafka 中的基本数据单元,包含有效载荷(payload)和元数据(如键和时间戳)。
  12. 偏移量(Offset)
    • 消息在分区中的序列号,用于追踪消息的位置和确保消息顺序。
  13. 持久性(Durability)
    • Kafka 提供了持久化消息的机制,确保消息不会因为系统故障而丢失。
  14. 可扩展性(Scalability)
    • Kafka 支持在线水平扩展,可以通过增加更多的 Broker 来扩展系统。
  15. 流处理(Stream Processing)
    • Kafka 支持流处理,允许对实时数据流进行处理和分析。
  16. 消息保留策略(Retention Policy)
    • Kafka 允许设置消息的保留时间或大小,超过限制后,旧的消息将被删除。
  17. 高吞吐量(High Throughput)
    • Kafka 设计用于高吞吐量的消息处理,即使在廉价的硬件上也能实现高性能。

这些核心概念共同构成了 Kafka 强大的消息系统,使其在分布式系统中的数据传输和处理方面表现出色。

4、 Kafka 的核心 API

Kafka 提供了几个核心的 API,以支持不同类型的数据处理和应用场景:

  1. Producer API
    • 允许应用程序向一个或多个 Kafka 主题发送消息记录。生产者可以批次发送消息以提高效率。
  2. Consumer API
    • 允许应用程序订阅一个或多个主题并处理生成的记录流。消费者可以从主题读取数据。
  3. Streams API
    • 允许应用程序作为一个流处理器,从一个或多个主题中消费输入流,并为其生成输出流,有效将输入流转换为输出流。
  4. Connector API
    • 允许构建和运行可重用的生产者或消费者,将 Kafka 主题连接到现有的应用程序或数据系统,如关系型数据库。

这些 API 使得 Kafka 不仅可以作为简单的消息队列使用,还可以构建复杂的流处理应用程序。客户端和服务器之间的通信是通过简单、高性能、语言无关的 TCP 协议完成的,此协议已版本化并保持与旧版本的向后兼容性。Kafka 提供了多种语言的客户端库,以支持不同的编程环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1647423.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习中的不确定性量化:技术、应用和挑战综述(一)

不确定性量化(UQ)在减少优化和决策过程中的不确定性方面起着关键作用,应用于解决各种现实世界的科学和工程应用。贝叶斯近似和集成学习技术是文献中使用最广泛的两种UQ方法。在这方面,研究人员提出了不同的UQ方法,并测试了它们在各种应用中的…

10.Java对象内置结构

文章目录 Java对象内置结构1.Java对象的三个部分1.1.对象头1.2.对象体1.3.对齐字节 2.对象结构中核心字段的作用2.1.MarkWord(标记字)2.2.Class Pointer(类对象指针)2.3.Array Length(数组长度)2.4.对象体2.5.对齐字节 3.Mark Word的结构信息3.1.不同锁状态下的Mark Word字段结…

GraphGPT——图结构数据的新语言模型

在人工智能的浪潮中,图神经网络(GNNs)已经成为理解和分析图结构数据的强大工具。然而,GNNs在面对未标记数据时,其泛化能力往往受限。为了突破这一局限,研究者们提出了GraphGPT,这是一种为大语言…

部署YUM仓库以及NFS共享服务

YUM仓库部署 一.YUM概述 YUM仓库源是一种软件包管理工具,用于在Linux系统上安装、更新和删除软件包。YUM仓库源包含了软件包的元数据信息和实际的软件包文件。用户可以通过配置YUM仓库源,从中下载和安装软件包。 常见的YUM仓库源包括: 本…

pip install dotenv出现error: subprocess-exited-with-error的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

springboot+vue+elementui实现校园互助平台大作业、毕业设计

目录 一、项目介绍 二、项目截图 管理后台 1.登录(默认管理员账号密码均为:admin) 2. 用户管理 ​编辑 3.任务管理 互助单(学生发布) 行政单(教师发布) ​编辑 审核(退回需…

36.Docker-Dockerfile自定义镜像

镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 镜像是分层机构,每一层都是一个layer BaseImage层:包含基本的系统函数库、环境变量、文件系统 EntryPoint:入口,是镜像中应用启动的命令 其他:在…

电脑c盘太满了,如何清理 电脑杀毒软件哪个好用又干净免费 电脑预防病毒的软件 cleanmymacX有必要买吗 杀毒软件排行榜第一名

杀毒软件通常集成监控识别、病毒扫描和清除、自动升级、主动防御等功能,有的杀毒软件还带有数据恢复、防范黑客入侵、网络流量控制等功能,是计算机防御系统的重要组成部分。 那么,对于Mac电脑用户来说,哪款电脑杀毒软件更好呢&a…

PCB光控打孔机第二版程序(一)

/*PCB机程序 XY同时启动 L9751 CODE61068 2018 6 19 08:00 固定位置释放吸盘*/ /*修正寻点第十二条结束调用计算坐标L5091,自动运行Y计算L6280 6281***/ /*** 开外部中断2关闭定时器2XY轴输出信号,自动运行循环检测外部中断高电平重启XY轴输出信号 增加寻…

LeetCode 难题解析 —— 正则表达式匹配 (动态规划)

10. 正则表达式匹配 思路解析 这道题虽然看起来不难理解,但却存在多种可能,当然这种可能的数量是有限的,且其规律对于每一次判别都使用,所以自然而然就想到用 动态规划 的方法啦 接下来逐步分析可能的情况: &#x…

探索中位数快速排序算法:高效寻找数据集的中间值

在计算机科学领域,寻找数据集的中位数是一个常见而重要的问题。而快速排序算法作为一种高效的排序算法,可以被巧妙地利用来解决中位数查找的问题。本文将深入探讨中位数快速排序算法的原理、实现方法以及应用场景,带你领略这一寻找中间值的高…

[UDS][OTA] 自定义 IntelHEX (IHEX) format read/write library in C

参考修改 参考github的MIT协议开源项目 ihex 改写的代码 https://gitee.com/liudegui/intelhex-c 修改点: 修改Makefile脚本,支持x86_X64平台和aarch64平台将默认读取行长度设置为16位删除与ihex和bin之间的转换无关的示例代码 十六进制描述 HEX格式…

C++容器——deque

deque容器 定义:动态数组,是一种双向开口的线性容器,意味着你不仅可以像在普通队列的末尾添加和移除元素,还可以在前端执行这些操作。 与其他容器相比不同的点: 与vector的主要区别: 连续性:…

基于 Spring Boot 博客系统开发(六)

基于 Spring Boot 博客系统开发(六) 本系统是简易的个人博客系统开发,为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。🌿🌿🌿 基于 Spring Boot 博客系统开发(五)&#x1f…

商标不做检索分析,直接申请通过率很低!

今天有个网友拿到驳回通知书找到普推知产老杨,让分析驳回通过率如何,他主要两个文字商标和两个图形商标,文字商标都是两个字的,两个字的商标名称基本都有相同或高近,引用了好几个高度近似,直接做驳回复审通…

Unity 性能优化之光照优化(七)

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、测试目的一、实时光源是什么?二、开始测试1.场景中只有一个光照的数值情况2.添加4个点光源后4.结果 总结 前言 实时光源数量越多&#x…

【前端】创建跳动字符效果的前端技术实现

创建跳动字符效果的前端技术实现 在前端开发中,动态视效能够显著增强用户体验。本文介绍一种实现字符跳动效果的技术方案,通过简单的HTML、CSS和JavaScript代码,你可以为网页文本添加生动的交互动画。这种效果可以用于吸引用户注意、增强品牌…

<网络安全>《77 概念讲解<第十课 物联网常用协议-(近距离通信)感应层协议>》

协议简称全称名称内容说明RFIDRadio Frequency Identification射频识别阅读器与标签之间进行非接触式的数据通信,达到识别目标的目的。RFID的应用非常广泛,典型应用有动物晶片、汽车晶片防盗器、门禁管制、停车场管制、生产线自动化、物料管理。完整的RF…

SQLI-labs-第十三关和第十四关

目录 第十三关 1、判断注入点 2、判断当前数据库 3、爆表名 4、爆字段名 5、爆值 第十四关 1、判断注入点 知识点:POST方式的单引号和括号闭合错误,报错注入 第十三关 思路: 1、判断注入点 使用Burpsuite抓包 首先加入一个单引号,…

【管理篇】管理三步曲:团队建设(二)

目录标题 如何着手团队建设提升个人能力1、要提升员工的什么能力2、提升员工个人能力的初衷是什么?3、如何达成上述目标4、应该如何激发员工学习的动力和意愿呢5、关于提升员工的能力,有两个信念特别重要: 提升员工的工作意愿和积极性1、管理…