Kafka技术详解[1]:简介与基础概念

news2024/9/24 5:05:31

目录

1. Kafka入门

1.1 概述

1.1.1 初识Kafka

1.1.2 消息队列

1.1.3 生产者-消费者模式

1.1.4 消息中间件对比

1.1.5 ZooKeeper


1. Kafka入门

1.1 概述

1.1.1 初识Kafka

Kafka是由Scala和Java语言开发的高吞吐量分布式消息发布和订阅系统,也是大数据技术领域中用作数据交换的核心组件之一。因其高吞吐量、低延迟、高可伸缩性、高可靠性、高并发性以及活跃的社区支持等特点而受到广泛欢迎。

2010年,LinkedIn公司为了解决消息传输过程中的阻塞和服务不可访问等问题,主导开发了一款分布式消息日志传输系统。该系统的命名灵感来源于西方表现主义文学先驱小说家Franz Kafka的作品《变形记》,尽管这个名字与软件特性并无直接关联。由于其卓越的性能,Kafka在2011年被捐献给Apache基金会,并在同年被纳入Apache软件基金会孵化器项目。2012年10月,Kafka正式成为Apache顶级项目,并逐渐发展成为一款开源分布式事件流处理平台系统,被广泛应用于高性能数据管道、流分析、数据集成和关键任务应用程序。

官网地址:Apache KafkaApache Kafka: A Distributed Streaming Platform.icon-default.png?t=O83Ahttps://kafka.apache.org/

1.1.2 消息队列

Kafka最初设计为专门用于数据传输的消息系统,类似于RabbitMQ、ActiveMQ、RocketMQ等。这些软件的名称中的“MQ”是“Message Queue”(消息队列)的缩写,核心功能是传输数据。Java中实现数据传输功能通常需要遵循Java消息服务技术规范(JMS)。ActiveMQ完全遵循了JMS技术规范,而RabbitMQ则遵循了AMQP(Advanced Message Queuing Protocol)规范,并兼容JMS规范。此外,还有用于物联网设备间消息传输的MQTT协议。

虽然Kafka具备消息系统的基本功能,但其设计具有独特之处,仅借鉴了JMS规范的思想而未完全遵循。因此,虽然Kafka是一个消息系统,但它并未被称为“KafkaMQ”。

为了更好地理解消息系统,这里简要介绍JMS规范:

  • JMS是Java平台的消息中间件通用规范,定义了用于消息中间件的标准接口。类似于JDBC规范,JMS定义了系统之间传输消息的接口。
  • JMS定义了许多用于通信的组件:
    • JMS Provider:实现JMS接口和规范的消息中间件,如RabbitMQ、ActiveMQ、Kafka。
    • JMS Message:数据,通常采用Java数据模型进行封装,包含消息头、属性和主体内容。
    • JMS Producer:生产数据的客户端应用程序,通过JMS接口发送消息。
    • JMS Consumer:从消息提供者中获取数据的客户端应用程序,通过JMS接口接收消息。
  • JMS支持两种消息模型:P2P(点对点)模型和发布/订阅模型。
    • P2P模型:基于队列,消息生产者将数据发送到队列,消费者从中接收消息。
    • 发布/订阅模型:基于主题,生产者按主题发送消息,消费者订阅感兴趣的主题。

1.1.3 生产者-消费者模式

生产者-消费者模式通过一个容器(通常是阻塞队列)来解耦生产者和消费者。在分布式环境中,这个容器通常由第三方软件实现,即所谓的中间件。中间件的使用旨在降低生产者和消费者之间的耦合度,并提高消息传输效率。

1.1.4 消息中间件对比

下表总结了几种常见消息中间件的主要特性:

特性ActiveMQRabbitMQRocketMQKafka
单机吞吐量万级万级10万级10万级
Topic数量对吞吐量的影响不详不详Topic可以达到几百/几千量级Topic可以达到几百量级,更多时吞吐量会下降
时效性ms级微秒级别ms级ms级
可用性非常高非常高
消息可靠性有较低概率丢失数据基本不丢经过参数优化配置,可以做到0丢失经过参数优化配置,可以做到0丢失
功能支持MQ领域的功能极其完备并发能力强,性能极好,延时很低MQ功能较为完善,分布式,扩展性好功能较为简单,支持简单的MQ功能,在大数据领域被广泛使用
其他社区不是很活跃开源,稳定,社区活跃度高阿里开发,社区活跃度不高开源,高吞吐量,社区活跃度极高

在大数据场景中,Kafka作为消息中间件被广泛采用;而在Java EE开发中,则主要使用ActiveMQ、RabbitMQ、RocketMQ。如果项目需要融合Java EE和大数据,则Kafka是一个很好的选择。

1.1.5 ZooKeeper

ZooKeeper是一款开源的分布式应用程序协调服务软件。在多节点分布式架构中,ZooKeeper用于保持各节点间环境和系统配置的一致性。Kafka作为分布式事件流处理平台,利用ZooKeeper来协调其多个服务节点。然而,为了减少与其他软件的耦合,从Kafka 2.8.X版本开始,引入了Raft算法进行节点间的协调管理,以期在未来版本中逐步替代ZooKeeper。

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

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

相关文章

《汇编语言》第14章——实验 14访问CMOS RAM

编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间 assume cs:code data segment db 2024/09/23 00:00:00,$ data endscode segment start:mov ax,datamov es,axcall get_hms_funccall get_ymd_funcmov dh,12 ;dh中存放…

黑马头条day3-2 自媒体文章管理

前边还有一个 素材列表查询 没什么难度 就略过了 查询所有频道和查询自媒体文章也是和素材列表查询类似 就是普通的查询 所以略过了 文章发布 这个其实挺复杂的 一共三张表 一个文章表 一个素材表 一个文章和素材的关联表 区分修改与新增就是看是否存在id 如果是保存草稿…

实现一个基于nio的discard server

写在前面 源码 。 为了能够进一步的熟悉下nio相关的api操作,本文来实现一个基于nio的discard server。 discard server的意思是,server接收到来自client的一个消息之后,直接就将连接关闭,即discard。 1:正戏 1.1&…

MySQL深度探索:掌握触发器自动化与精细用户权限管理,提升数据库效能与安全

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#x…

gitlab集成CI/CD,shell方式部署

目录 1.首先安装好gitlab和gitlab-runner,这两个,看我以往的教程 2.注册新的 Runner 3. 步骤 3.1 Enter the GitLab instance URL (for example, https://gitlab.com/): 3.2 Enter the registration token: 3.3 Enter a description for the runner: 3…

【2024.09】关于 UMLS 在支持大型语言模型提出的诊断生成中的作用

生物医学信息学杂志 链接:https://www.sciencedirect.com/science/article/abs/pii/S1532046424001254?via%3Dihub On the role of the UMLS in supporting diagnosis generation proposed by Large Language Models Author links open overlay panelMajid Afsh…

线上搭子小程序:随时随地找搭子!

搭子作为当下流行的一种社交方式,受到了年轻人的讨论关注,不管做什么都可以找不同的“搭子”。追剧、考试、健身、减肥、旅游等都可以找到志趣相投的搭子,满足年轻人的社交需求。 在互联网的发展下,年轻人找搭子也逐渐倾向于线上…

ubuntu22 解决docker无法下载镜像问题

参考在 Ubuntu 中安装 Docker_ubuntu安装docker-CSDN博客 安装docker完成后,运行如下命令验证 Docker 服务是否在运行: systemctl status docker 运行(sudo docker run hello-world)例子报错: 问题:Docker…

ubuntu内网穿透后在公网使用ssh登录

需求: 我有一台内网可以通过ssh 22端口访问的设备操作系统是ubuntu server我还有1台拥有公网IP的服务器,IP地址是 6.66.666.6666我想随时从其他网段通过ssh访问我的ubuntu server设备 实现: 工具准备:frp 网址:https…

一看就会!PS2024下载安装教程详解

PS2024下载方法: PS2024安装教程: 1、右击【PS2024.zip】,选择【解压到PS2024】 2、右击【Set-up.exe】,选择【以管理员身份运行】 3、点击右下角灰色的小文件夹图标,选择【更改位置】 4、选择安装路径后,…

【每日刷题】Day130

【每日刷题】Day130 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 144. 二叉树的前序遍历 - 力扣(LeetCode) 2. 94. 二叉树的中序遍历 - 力扣…

注册安全分析报告:闪送

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

C#测试调用Ghostscript.NET浏览PDF文件

Ghostscript.NET是针对Ghostscript的C#封装库,支持解析PostScript语言、操作PDF文件等。使用Ghostscript.NET的GhostscriptViewer 模块可以以图片形式查看PDF文档。本文学习并测试调用Ghostscript.NET模块打开及浏览PDF文件的基本用法。   Ghostscript.NET目前主要…

.NET 6.0 WebAPI 使用JWT生成Token的验证授权

1.引入相关程序包JwtBearer注意版本: 2.配置文件appsettings.json写相关配置参数(也可不写,写在程序里面,数据库读取也是一样的) , //JWT加密"JWTToken": {"SecretKey": "jsaduwqe6asdjewejdue7dfmsdfu0sdfmwmsd8wfsd6",…

洛谷-P3916 图的遍历

题目描述 给出 N 个点,M 条边的有向图,对于每个点 v,求A(v) 表示从点 v 出发,能到达编号最大的点。 思路 既然是要找到最大的点,那么我从最大的点开始DFS是否可以? 于是可以反向建图,然后从最…

HTML图片标记(四)配图详解

目录 1.HTML图片的基础语法 2.设置图片大小 3.改变图片边距 4.图片对齐方式 1.HTML图片的基础语法 <img src"图片路径"> 2.设置图片大小 <img src"图片路径" width"" length""> 3.改变图片边距 <img src"…

Python 二次开发金橙子打印软件:开启高效打印新旅程

目录 一、准备工作&#xff1a;搭建系统环境 二、二次开发流程详解 结合一个实例来讲解如何进行二次开发。 三、Python 二次开发关键要素 &#xff08;一&#xff09;源码示例与解读 &#xff08;二&#xff09;二次开发文档指引 四、问题汇总与解决方案 &#xff08;一…

【HTML5】html5开篇基础(2)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

Spring Boot 学习之路 -- 配置项目

前言 最近因为业务需要&#xff0c;被拉去研究后端的项目&#xff0c;代码基于 Spring Boot&#xff0c;对我来说完全小白&#xff0c;需要重新学习研究…出于个人习惯&#xff0c;会以 Blog 文章的方式做一些记录&#xff0c;文章内容基本来源于「 Spring Boot 从入门到精通&…

【一起学NLP】Chapter2-学习神经网络

目录 学习神经网络损失函数Tip:One-hot向量导数与梯度Tip:严格地说链式法则计算图反向传播其他典型的运算结点乘法结点分支节点Repeat节点Sum节点MatMul节点 Tip:浅拷贝和深拷贝的差异梯度的推导和反向传播的实现Sigmoid层Affine层Softmax with Loss层 权重的更新——随机梯度下…