1. kafka-提高生产者吞吐量

news2024/11/16 3:49:08

kafka的基础使用知识不在这篇文章阐述,默认读者都会使用

首先kafka的生产者原理,如下。图来自网上
在这里插入图片描述
上面的图可能不全, 我再详细描述下,在消息发送过程中,设计到两个线程main和sender线程;

(1)main线程会创建一个RecordAccumulator的双端队列(可以理解为缓冲区)
在这里插入图片描述
main线程不断发送消息到缓冲区,而sender线程不断从缓冲区拿消息发送到Broker中

(2)在发送过程中,其中会经过三个步骤,a-拦截器(使用场景不多),b-序列化器,c-Partioner(分区器)

(3)经过三个这些步骤后,消息会放到缓冲区中,但是kafka不会来一个消息就发一个到broker中,而是根据batch(批次)来,当以下任意一个条件满足,就会发送消息(主要流程,还有一些别逻辑)
在这里插入图片描述
翻译下就是:
a - batch满了。(默认16k)
b - 等待时间到了(lingerMS默认是0ms,这个真要设置,不然来一个发一个,吞吐差)
c - RecordAccumulator满了。(默认32mm,这情况所有分区Partioner立马ready好,等待发送)
d - RecordAccumulator关闭了

(4)所以结论来说,提高kafka生产者的吞吐性能,涉及以下几个参数
batch-size、linger.ms、缓冲区大小和消息压缩(消息被压缩了,一次就能发送更多消息,带来更好的吞吐性能)

简化代码案例

package cn.sysu.kafka;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;

import java.util.Properties;

public class ProducerParameters {


	public static void main(String[] args) {
		// 1.配置参数
		Properties properties = new Properties();
		// 1.1连接kafka集群
		properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"127.0.0.1:9092");
		// 1.2序列化
		properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
		properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
		// 1.3根据业务场景,提高生产者的吞吐量
		properties.put(ProducerConfig.BUFFER_MEMORY_CONFIG,32 * 1024 * 1024);//缓冲区大小
		properties.put(ProducerConfig.BATCH_SIZE_CONFIG,16* 1024);//批次大小
		properties.put(ProducerConfig.LINGER_MS_CONFIG,5); //Linger.ms
		properties.put(ProducerConfig.COMPRESSION_TYPE_CONFIG,"snappy"); //压缩


		// 2.创建生产者
		KafkaProducer<String,String> kafkaProducer = new KafkaProducer<>(properties);
		// 3.发送消息
		for (int i = 0; i < 100; i++) {
			kafkaProducer.send(new ProducerRecord<>("topic","消息体"+i));
		}

		// 4.关闭资源,根据实际生产环境,可能生产者生命周期与服务一样
		kafkaProducer.close();
	}

}

对您有用的话,欢迎三连!

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

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

相关文章

Java接口——子接口是否能直接通过子接口名调用父接口类方法

Java9允许在接口中定义默认方法和类方法&#xff0c;为接口增加了一种私有方法&#xff0c;也可以提供实现。 接口就是定义一组通用的方法&#xff0c;就像U盘&#xff0c;只要是USB接口大部分都可以在电脑上使用&#xff0c;电脑无需关心U盘内部怎么实现&#xff0c;只需要告…

浅谈python中@装饰器 - 附例子(含类装饰器与函数装饰器)

浅谈python中装饰器 文章目录浅谈python中装饰器关于装饰器&#xff08;decorator&#xff09;小总结关于&#xff08;语法糖&#xff09;进阶装饰器顺序装饰器 & 参数End提到的使用首先要先讲一下装饰器的概念 关于装饰器&#xff08;decorator&#xff09; 先来看看官方…

计算机相关专业提升学历的解决方案(硕士研究生)

文章目录1、正规全日制硕士1.1 研究生入学考试1.2 硕士毕业要求2、继续教育&#xff08;非全日制&#xff09;2.1 在职研究生2.2 同等学力申硕3、海外硕士3.1 海外硕士申请3.2 中外合作项目1、正规全日制硕士 1.1 研究生入学考试 1、考试报名 官方网站&#xff1a;国家研究生…

玩转PPT 第2节 PPT第一辅助神器iSlide操作

ppt神器 第2节 islide常用操作锦集1 一键优化1.1 统一字体1.2 统一段落1.3 统一参考线1.4 统一主题色2 设计排版2.1 快速复制图形实现矩阵布局2.2 环形布局复制2.3 环形裁剪2.4 矩阵裁剪3 设计工具3.1 对齐3.2 大小3.3 对齐到参考线3.4 选择&#xff0c;相当于快速组合取消等3.…

树与二叉树深度剖析(二)

一. 树表示法1.双亲表示法(1).含义在一棵树中&#xff0c;任意一个结点的双亲只有一个&#xff0c;这是由树的定义决定的。双亲表示法就是利用了树的这个性质&#xff0c;在存储结点信息的同时&#xff0c;在每个节点中附设一个指向其双亲的指针&#xff0c; 指向双亲在链表中的…

IMX Linux 用户手册 — 3

IMX Linux 用户手册 — 3 10.3 CAAM Job Ring后端驱动规范 CAAM作业环后端驱动(caam_jr)实现并使用作业环接口(JRI)向CAAM引擎提交来自前端驱动(caamalg, caamhash, caampkc, caamrng, caamkeyblob)的加密API服务请求。 CAAM驱动程序有几个选项&#xff0c;最显著的是硬件工作…

ssm宿舍水电费报修考勤管理系统的开发与实现

目 录 摘 要 I 目 录 1 第1章 概述 1 1.1 研究背景 1 1.2 研究现状 1 1.3 研究内容 2 第二章 开发技术介绍 2 2.1 系统开发平台 2 2.2 平台开发相关技术 3 2.2.1 B/S架构 3 2.2.2 mysql数据库介绍 4 2.2.3 JSP技术介绍 4 第三章 系…

如何增强企业数字敏捷性?|身份云研究院

在经济下行背景中&#xff0c;企业面临数字化转型和降本增效两大课题&#xff0c;解决这两个问题的核心是增强企业数字敏捷性。比起从业务侧逐个优化&#xff0c;决策者们更应从数字化基础设施入手&#xff0c;搭好底层数字化架构来保障企业在不断变化的技术和法规中获得适应性…

随时随地查看远程试验数据与记录——IPEhub2与IPEmotion APP

一 背景 在工况恶劣、空间狭小的试验场景或工程机械领域中&#xff0c;不但试验人员在试验环境中对自身安全没有保障&#xff0c;而且试验过程也会受到影响&#xff0c;如高温高压测试、工程机械液压系统测试等。对此&#xff0c;结合IPEhub2与IPEmotion APP&#xff0c;既可保…

linux journalctl使用详解

1.概述 ​ journalctl 用来查询 systemd-journald 服务收集到的日志。systemd-journald 服务是 systemd init 系统提供的收集系统日志的服务。journalctl通常用来查询systemd管理的Unit的日志信息。 2.使用方法 $ man journalctl $ journalctl --help 常用方法 $ journalctl …

【可解释性机器学习】解释基于Scikit-learn进行文本分类的pipeline及结果

使用Scikit-learn进行文本分类pipeline1. 基线模型2. 基线模型&#xff0c;改进的数据3. Pipeline改进4. 基于字符的pipeline5. 调试HashingVectorizer参考资料scikit-learn文档提供了一个很好的文本分类教程。确保先阅读它。 本文中&#xff0c;我们将做类似的事情&#xff0c…

学习笔记-----通道

加粗样式# system v共享内存 进程通信的前提条件是&#xff1a;让不同进程看见同一份资源。 共享内存&#xff1a;其实就是进程获取共享区里面的地址&#xff0c;该地址为物理内存中某块我所需要资源的地址(该内存是创建的共享内存处在共享区里)&#xff0c;地址通过页表映射到…

项目工时管理遇难题?看看这套工时管理系统解决方案

随着社会化大生产的发展以及市场竞争的日趋激烈&#xff0c;现代企业的规模在不断扩大。对于项目企业来说&#xff0c;人力资源的成本就是项目的主要成本&#xff0c;而工时是项目中人工成本的重要依据&#xff0c;因此&#xff0c;管理好员工工时是项目管理过程中最重要的任务…

计算机图形学 第3章 圆的扫描转换-第三章结束

书用的是 书名:计算机图形学基础教程&#xff08;VisualC版&#xff09;&#xff08;第二版&#xff09; 定价&#xff1a;44.5元 作者:孔令德 出版社&#xff1a;清华大学出版社 出版日期&#xff1a;2013-03-01 ISBN&#xff1a;9787302297529 目录习题3&#xff08;续&#…

【数据结构】8.3 交换排序

文章目录1. 冒泡排序冒泡排序算法冒泡排序算法分析2. 快速排序快速排序算法快速排序算法分析基本思想 每两个元素之间互相比较&#xff0c;如果发现大小关系相反&#xff0c;则将他们交换过来&#xff0c;直到所有记录都排好序为止。假设希望是从小到大来排序&#xff0c;结果…

Nginx-反向代理配置学习总结

Nginx-反向代理配置学习总结 正向代理&#xff1a;指的是通过代理服务器 代理浏览器/客户端去重定向请求访问到目标服务器 的一种代理服务&#xff0c;正向代理服务的特点是代理服务器 代理的对象是浏览器/客户端&#xff0c;也就是对于目标服务器 来说浏览器/客户端是隐藏的。…

文件的IO

一、文件的定义狭隘的文件:指你的硬盘上的文件和目录.广义的文件:泛指计算机中的硬件资源,操作系统中,把很多硬件设备和软件资源都抽象成了文件,按照文件的形式统一管理.比如网卡,操作系统也是把网卡抽象成了文件资源,所以说操作网卡其实和操作文件的方式是基本一样的.而我们本…

初识流计算框架Spark

Spark简介 Spark最初由美国加州伯克利大学&#xff08;UCBerkeley&#xff09;的AMP&#xff08;Algorithms, Machines and People&#xff09;实验室于2009年开发&#xff0c;是基于内存计算的大数据并行计算框架&#xff0c;可用于构建大型的、低延迟的数据分析应用程序。Sp…

一刷代码随想录——链表

1.理论基础链表节点的定义&#xff1a;struct ListNode {int val;ListNode* next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode* next) : val(x), next(next) {} };根据卡哥提示&#xff0c;由于力扣中已经给出如…

C++中拷贝构造函数、拷贝赋值运算符、析构函数、移动构造函数、移动赋值运算符(三/五法则)

1、介绍 三五法则是针对C中类的成员和类对象的操作函数。 三法则是指&#xff1a;拷贝构造函数、拷贝赋值运算符、析构函数。 五法则是在三法则的基础上增加了&#xff1a;移动构造函数、移动赋值运算符。 2、拷贝构造函数 定义&#xff1a;如果构造函数的第一个参数是自身…