【从客户端理解Kafka的使用方式】

文章目录

  • 一、从基础的客户端说起
    • 1、消息发送者主流程
    • 2、消息消费者主流程
  • 二、从客户端属性来梳理客户端工作机制

这一部分主要是从客户端使用的角度来理解Kakfa的重要机制。重点依然是要建立自己脑海中的Kafka消费
模型。Kafka的HighLevel API使用是非常简单的,所以梳理模型时也要尽量简单化,主线清晰,细节慢慢扩
展。
Kafka提供了两套客户端API,HighLevel API和LowLevel API。 HighLevel API封装了kafka的运行细
节,使用起来比较简单,是企业开发过程中最常用的客户端API。 而LowLevel API则需要客户端自己管
理Kafka的运行细节,Partition,Offset这些数据都由客户端自行管理。这层API功能更灵活,但是使
用起来非常复杂,也更容易出错。只在极少数对性能要求非常极致的场景才会偶尔使用。我们的重点
是HighLeve API 。

一、从基础的客户端说起

Kafka提供了非常简单的客户端API。只需要引入一个Maven依赖即可:

1、消息发送者主流程

然后可以使用Kafka提供的Producer类,快速发送消息。
整体来说,构建Producer分为三个步骤:

  1. 设置Producer核心属性 :Producer可选的属性都可以由ProducerConfig类管理。比如
    ProducerConfig.BOOTSTRAP_SERVERS_CONFIG属性,显然就是指发送者要将消息发到哪个Kafka集
    群上。这是每个Producer必选的属性。在ProducerConfig中,对于大部分比较重要的属性,都配置了
    对应的DOC属性进行描述。
  2. 构建消息:Kafka的消息是一个Key-Value结构的消息。其中,key和value都可以是任意对象类型。其
    中,key主要是用来进行Partition分区的,业务上更关心的是value。
  3. 使用Producer发送消息。:通常用到的就是单向发送、同步发送和异步发送者三种发送方式。

2、消息消费者主流程

接下来可以使用Kafka提供的Consumer类,快速消费消息。
整体来说,Consumer同样是分为三个步骤:

  1. 设置Consumer核心属性 :可选的属性都可以由ConsumerConfig类管理。在这个类中,同样对于大部
    分比较重要的属性,都配置了对应的DOC属性进行描述。同样BOOTSTRAP_SERVERS_CONFIG是必须
    设置的属性。
  2. 拉取消息:Kafka采用Consumer主动拉取消息的Pull模式。consumer主动从Broker上拉取一批感兴趣
    的消息。
  3. 处理消息,提交位点:消费者将消息拉取完成后,就可以交由业务自行处理对应的这一批消息了。只是
    消费者需要向Broker提交偏移量offset。如果不提交Offset,Broker会认为消费者端消息处理失败了,
    还会重复进行推送。
    Kafka的客户端基本就是固定的按照这三个大的步骤运行。在具体使用过程中,最大的变数基本上就是给
    生产者和消费者的设定合适的属性。这些属性极大的影响了客户端程序的执行方式。

二、从客户端属性来梳理客户端工作机制

渔与鱼:Kafka的客户端API的重要目的就是想要简化客户端的使用方式,所以对于API的使用,尽量熟练
就可以了。对于其他重要的属性,都可以通过源码中的描述去学习,并且可以设计一些场景去进行验证。其
重点,是要逐步在脑海之中建立一个Message在Kafka集群中进行流转的基础模型。
其实Kafka的设计精髓,是在网络不稳定,服务也随时会崩溃的这些作死的复杂场景下,如何保证消息的
高并发、高吞吐,那才是Kafka最为精妙的地方。但是要理解那些复杂的问题,都是需要建立在这个基础模
型基础上的。

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

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

相关文章

【Nginx】Nginx了解(基础)

文章目录 Nginx产生的原因Nginx简介Nginx的作用反向代理负载均衡策略动静分离 Nginx的Windows下的安装Linux下的安装Nginx常用命令 负载均衡功能演示 Nginx产生的原因 背景 一个公司的项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发…

lv12 uboot移植深化 9

u-boot-2013.01移植 【实验目的】 了解u-boot 的代码结构及移植的基本方法 【实验环境】 ubuntu 14.04发行版FS4412实验平台交叉编译工具arm-none-linux-gnueabi- 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行 【实验步骤】 1 建立自己的平台 1.…

flutter 代码混淆

Flutter 应用混淆: Flutter 应用的混淆非常简单,只需要在构建 release 版应用时结合使用 --obfuscate 和 --split-debug-info 这两个参数即可。 –obfuscate --split-debug-info 用来指定输出调试文件的位置,该命令会生成一个符号映射表。目前…

uniapp api uni.request讲解

uni.request是Uniapp中用于发起网络请求的API。它类似于原生JavaScript中的XMLHttpRequest和浏览器提供的fetch函数。 使用uni.request可以发送HTTP请求,并获取响应数据。下面是uni.request的基本用法: uni.request({url: http://api.example.com/data,…

【TB作品】基于单片机的机械通风控制系统,实时温度和二氧化碳浓度

硬件: (1)51系列单片机,拟采用STC89C52RC; (2)DS18B20温度传感器; (3)二氧化碳浓度传感器:https://item.taobao.com/item.htm?spma21n57.1.0.0.1…

紫光展锐CEO任奇伟博士:展锐5G芯筑基当下,迈向未来

12月5日,紫光集团执行副总裁、紫光展锐CEO任奇伟博士受邀出席2023世界5G大会5G产业强基发展论坛,发表了题为《展锐5G芯:筑基当下,迈向未来》的演讲。 ​ 世界5G大会由国务院批准,国家发展改革委、科技部、工信部与地方…

c 关于数组几个查序程序

1. 查询某元素是否在数组中 int main(void) {// char i[10][2]{{1,7},{2,10},{5,2},{0,-1},{4,10},{10,1},{3,1},{0,8}};char z[10]{1,2,3,4,1,4,6,8,0,9};int zz0; //标志位:0:在 1:不在char in9; //输入数int t0;do{t;if(t>10)…

2.2 【渲染】渲染目标

一,渲染目标 一个渲染目标是指专门创建的Surface,可以将渲染定向到该Surface。 它可以是你自己创建,也可以其他人(例如,另一个进程)创建。如果你不是为了自己使用而渲染,可以使用 SCREEN_PROPERTY_PERMISSIONS 属性设置渲染目标的权限,以授予或拒绝对你创建的渲染目标…

【手撕算法系列】k-means

k-means k-means算法介绍 k-means算法介绍 K-means算法是一种用于聚类的迭代算法,它将数据集划分为K个簇,其中每个数据点属于与其最近的簇的中心。这个算法的目标是最小化簇内的平方和误差(簇内数据点与簇中心的距离的平方和)。 …

小程序使用Nodejs作为服务端,Nodejs与与MYSQL数据库相连

小程序使用Nodejs作为服务端,Nodejs与MYSQL数据库相连 一、搭建环境二、配置Nodejs三、与小程序交互四、跨域处理/报错处理五、nodejs连接mysql数据库六、微信小程序连接nodejs报错七、小程序成功与服务端相连,且能操作数据库一、搭建环境 新建空文件夹:Win + R进入cmd命令界…

再不跳槽,就晚了

从时间节点上来看,3月、4月是每年跳槽的黄金季! 以 BAT 为代表的互联网大厂,无论是薪资待遇、还是平台和福利,都一直是求职者眼中的香饽饽,“大厂经历” 在国内就业环境中无异于一块金子招牌。 现在年底了&#xff0…

android实战之Lifecycle感知组件生命周期

引言 在 Android 框架中定义的大多数应用组件都存在生命周期。生命周期由操作系统或进程中运行的框架代码管理。它们是 Android 工作原理的核心,应用必须遵循它们。如果不这样做,可能会引发内存泄漏甚至应用崩溃。 使用方式 1. 定义对象 public clas…

【推荐系统】推荐算法数学基础

【大家好,我是爱干饭的猿,本文重点介绍推荐系统涉及的数学知识、推荐系统涉及的概率统计知识。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇文章:《【推…

Docker与Containerd的异同

Docker与Containerd的异同 一、相同点 容器运行时:Docker和Containerd都是容器运行时工具,它们用于创建、运行和管理容器。轻量级:两者都提供了轻量级的解决方案,使得应用程序可以在隔离的环境中运行,同时保持性能和…

R语言|分面中嵌入趋势线

简介 关于分面的推文,小编根据实际科研需求,已经分享了很多技巧。例如: 分面中添加不同表格 分面中添加不同的直线 基于分面的面积图绘制 分面中的细节调整汇总 基于分面的折线图绘制 最近科研中又遇到了与分面相关的需求:…

CF1898C Colorful Grid(构造)

题目链接 题目大意 n 行 m 列 的一个矩阵,每行有m - 1条边,每列有 n - 1 条边。 问一共走 k 条边,能不能从 (1, 1),走到(n, m),要求该路径上&am…

【一文带你掌握Java中方法定义、调用和重载的技巧】

方法的定义和调用 方法的定义 方法(method)是一段用于实现特定功能的代码块,类似于其他编程语言中的函数(function)。方法被用来定义类或类的实例的行为特征和功能实现。方法是类和对象行为特征的抽象表示。方法与面向…

十八)Stable Diffusion使用教程:艺术二维码案例

今天说说怎么样使用SD生成艺术二维码。 我们直接上图。 方式有三种,分别如下: 1)方式一:直接 contronet 的tile模型进行控制 使用QRBTF Classic生成你的二维码。 首先输入网址,选择喜欢的二维码样式(推荐第一种就行): 然后选择相应参数,这里推荐最大的容错率,定…

JieLink+智能终端操作平台存在弱口令漏洞

产品简介 捷顺JeLink智能终端操作平台(JSOTC2016 fJeLink)是捷顺历经多年行业经验积累,集智能硬件技术视频分析技术、互联网技术等多种技术融合,基于B/S架构,实现核心业务处理模型(用户中心、投权中心财务中心中心值班室、 运维中心车行客户…

若依框架 新增外键表单组件

外键表单组件 若依框架提供了下拉框组件&#xff0c;但是数据是枚举数据中读取&#xff0c;但是对于外键表单没有提供。定义一个TableTag <template><div><template v-for"(item, index) in options" ><template ><spanv-if"value…