前言

前面已经介绍了Kafka的架构知识并引出了Kafka的相关专业名称进行解释

这次分享一下Kafka对生产者发送消息进行处理的运行机制和原理

生产者发送消息两种方式

同步发送消息

程序中线程执行完消息发送操作之后会等待Kafka的消息回应ack

默认等待30秒没有回应就会抛出异常

等待时间和重试次数都可以在设置参数中调整

同步发送消息,消息丢失一般就是长时间没有响应,对这个消息进行消息发送补偿或者持久化丢失消息的记录,处理比较简单

异步发送消息

⽣产者发送完消息后就可以执⾏之后的业务,Kafka代理节点在收到消息后执行完成之后异步调用生产者提供的callback回调方法,这个方法可以让我们对成功或者失败做一些后续处理

异步发送消息,会有发生消息丢失的风险,此时需要使用Kafka的持久化机制防止消息丢失

Kafka是先持久化磁盘后对消息进行读取的转发给消费者的

持久化优化参数ack

ack = 0       不需要Kafka代理节点持久化消息,直接返回ack  消息丢失最高

ack=1(默认): 主代理节点持久化到主题分区,才返回ack给⽣产者,性能和安全性是最均衡的

ack=-1/all。 所有代理节点都把消息持久化到主题分区,才返回ack给⽣产者,这种是最安全的,但是性能是最差的

消息发送缓冲区

kafka默认会创建⼀个消息缓冲区,⽤来存放要发送的消息,缓冲区是32MB

当消息缓冲区中累积的消息总大小达到或超过 16KB 时,线程会将这些消息打包起来发送代理节点

如果不够16kb也会 等待一段时间 (默认 0ms,即立即发送,有参数可以自己设置) 后将这些消息打包起来发送到Kafka的代理节点

消息发送缓冲区是可以增加吞吐量但是也增大了延迟,设置等待时间也是对业务中延迟和吞吐量的一种衡量

综上所述,Kafka应对异步发送消息,防止消息丢失的方法有: 1、Kafka自身的消息持久化机制2、callbak回调监控可以做到对丢失消息进行监控

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

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

相关文章

Python 获取对象信息的所有方法

在 Python 里,我们经常需要检查一个对象的类型、属性、方法,甚至它的源码。这对调试、学习和动态编程特别有用。今天我们就来聊聊获取对象信息的常见方法,按由浅入深的顺序来学习。 参考文章:Python 获取对象信息 | 简单一点学习…

vuhub Beelzebub靶场攻略

靶场下载: 下载地址:https://download.vulnhub.com/beelzebub/Beelzebub.zip 靶场攻略: 主机发现: nmap 192.168.163.1/24 端口扫描: nmap -p-65535 -A 192.168.163.152 发现没有额外端口。 页面扫描&#xff1…

开启单片机

前言:为未来拼搏的第n天,从单片机开始。为什么要学习单片机呢,单片机的工作涉及范围及其广如:消费电子,游戏机音响;工业控制:机器人控制;医疗设备,通信设备,物…

人工智能系列(8)如何实现无监督学习聚类(使用竞争学习)?

案例:鸢尾花数据集的聚类一.聚类简介神经网络能够从输入数据中自动提取有意义的特征,而竞争学习规则使得单层神经网络能够根据相似度将输入样本进行聚类,每个聚类由一个输出神经元代表并作为该类别的“原型”,从而实现对输入模式的…

Windows安装mamba全流程(全网最稳定最成功)

windows系统下安装mamba会遇到各种各样的问题。博主试了好几天,把能踩的坑都踩了,总结出了在windows下安装mamba的一套方法,已经给实验室的windows服务器都装上了。只要跟着我的流程走下来,大概率不会出问题,如果遇到其…

Autosar Dem配置-最大存储的DTC信息个数配置-基于ETAS软件

文章目录 前言 Autosar Dem相关配置 ETAS工具中的配置 生成文件分析 测试验证 总结 前言 诊断DTC开发中,会有故障快照和扩展数据的存储需求,但由于控制器的可用存储空间有限,所以无法存储所有DTC的信息,这时就需要限制存储的数量,本文介绍该参数在ETAS软件中的配置。 Au…

【MySQL】EXISTS 与 NOT EXISTS 深度解析:从原理到实战的完整指南

在复杂的业务查询中,我们常常需要判断“是否存在满足某条件的记录”或“找出不满足某些条件的记录”。这时,EXISTS 和 NOT EXISTS 子查询便成为强大的工具。它们不仅逻辑清晰、语义明确,而且在某些场景下性能远超 IN 或 JOIN。然而&#xff0…

面对信号在时频平面打结,VNCMD分割算法深度解密

“ 信号迷宫中的破壁者:VNCMD如何分解纠缠的时空密码?——从鲸歌到机械故障,宽带信号分解新纪元。”01—痛点直击:为什么传统方法集体失效?2017年,上海交大团队提出了一项突破性研究:变分非线性…

CSS优先级、HTTP响应状态码

CSS优先级 优先级:看CSS的来源、样式引入方式、选择器、源码顺序。 行内样式/内联样式:直接在HTML元素的style属性中编写CSS样式。这种方式适用于少量样式的情况,但不推荐在大规模开发中使用,因为它会使HTML文件变得冗长和难以维…

项目一系列-第2章 Git版本控制

第2章 Git版本控制 2.1 Git概述 Git是什么?Git是一个分布式版本控制工具,于管理开发过程中的文件。 Git有哪些作用? 远程备份:Git可以将本地代码备份到远程服务器,防止数据丢失。多人协作:Git运行多个开发者…

Java异常:认识异常、异常的作用、自定义异常

目录1.什么是异常?1)运行时异常2)编译时异常2.异常的作用1)Java 异常在定位 BUG 中的核心作用2)Java 异常作为方法内部特殊返回值的作用3)自定义异常1.什么是异常? Error:代表的系统级别错误(属…

第十九天-输入捕获实验

一、输入捕获概述1、输入捕获框图2、输入捕获工作详解①设置输入捕获滤波器可以设置滤波,滤除一些高电平脉宽不足的脉冲信号。②设置捕获极性③输入捕获映射④输入捕获分频器这里的捕获是将计数器的值存入比较寄存器中,分频次的作用是设置几个上升沿/下降…

多线程问题,子线程同时操作全局变量,使用后需要清空吗 ?

背景:目前有一个全局变量 ,某个方法中通过多线程,都操作这个变量,向这个全局变量中去添加元素,然后等所有子线程执行完了之后,对这个全局变量进行批量保存,然后这个全局变量还需要手动去清空吗&…

Netty知识储备:BIO、NIO、Reactor模型

学习Netty之前,首先先掌握这些基础知识:阻塞(Block)与非阻塞(Non-Block),同步(Synchronous)与异步(Asynchronous),Java BIO与NIO对比。…

用生成器守住架构,用 AI 放大效率:一套可落地的 AI 编程方法论

背景与问题 现实困境: 直接让 AI 产出整块业务代码,常常与现有架构风格、分层边界、依赖策略不一致,后续改造成本高;AI 对现实业务语境、领域规则难以精准把握;在既定模板成熟的场景下,代码生成器往往更快、更整齐。目…

码头岸电系统如何保障供电安全?安科瑞绝缘监测及故障定位方案解析

当岸电电网是TN-S系统时,船体未接专用接地线且船舶电网未与岸电零线接通,船舶电网发生单相接地故障时,人站在岸上触及船体会有触电危险,零线上可能出现高电压,单相接地电流大。当船体接专用接地线且船舶电网接入岸电零…

ESP32_u8g2移植

前言 U8g2 是一个用于嵌入式设备的单色图形库。U8g2支持单色OLED和LCD,并支持如SSD1306 SSD1315等多种类型的OLED驱动,几乎市面上常见都支持。 U8g2源码 download:https://github.com/olikraus/u8g21:环境 ESP32 S3(ESP32-S3-Dev…

MCP实现:.Net实现MCP服务端 + Ollama ,MCP服务端工具调用

本文使用.Net编写MCP服务端 Ollama ,实现简单MCP调用,代码仅实现基本演示功能。 文章目录一、Ollama如何安装使用二、创建.Net8项目,开发MCP服务端三、开发MCP客户端,并对接Ollama一、Ollama如何安装使用 请移步:htt…

Docker的安装使用以及常见的网络问题

一、什么是DockerDocker是一种容器化技术,用于快速打包、分发和运行程序。他的核心思想是"一次构建,到处运行",通过将应用及其依赖的环境打包到一个轻量级、可移植的容器中,实现跨平台一致运行。二、Docker的安装1.Cent…

C++入门学习

1.命名空间的介绍首先我们看到如下的代码&#xff0c;在C语言中&#xff1a;#include <stdio.h> #include <stdlib.h> int rand 10; // C语言没办法解决类似这样的命名冲突问题&#xff0c;所以C提出了namespace来解决 int main() {printf("%d\n", rand…