Kafka发送原理剖析其他生产者参数,2021年字节跳动、阿里等大厂最全Java面试题

news/2024/7/6 2:02:46 标签: 面试, java, 后端

这个参数用来指定分区中必须有多少个副本收到这条消息,之后生产者才会认为这条消息时写入成功的。acks是生产者客户端中非常重要的一个参数,它涉及到消息的可靠性和吞吐量之间的权衡。

  • ack=0, 生产者在成功写入消息之前不会等待任何来自服务器的相应。如果出现问题生产者是感知不到的,消息就丢失了。不过因为生产者不需要等待服务器响应,所以它可以以网络能够支持的最大速度发送消息,从而达到很高的吞吐量。
  • ack=1,默认值为1,只要集群的首领节点收到消息,生产这就会收到一个来自服务器的成功响应。如果消息无法达到首领节点(比如首领节点崩溃,新的首领还没有被选举出来),生产者会收到一个错误响应,为了避免数据丢失,生产者会重发消息。但是,这样还有可能会导致数据丢失,如果收到写成功通知,此时首领节点还没来的及同步数据到follower节点,首领节点崩溃,就会导致数据丢失。
  • ack=-1, 只有当所有参与复制的节点都收到消息时,生产这会收到一个来自服务器的成功响应,这种模式是最安全的,它可以保证不止一个服务器收到消息。

注意:acks参数配置的是一个字符串类型,而不是整数类型,如果配置为整数类型会抛出以下异常
image

2.retries

生产者从服务器收到的错误有可能是临时性的错误(比如分区找不到首领)。在这种情况下,如果达到了 retires 设置的次数,生产者会放弃重试并返回错误。默认情况下,生产者会在每次重试之间等待 100ms,可以通过 retry.backoff.ms 参数来修改这个时间间隔。

3.batch.size

当有多个消息要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小,按照字节数计算,而不是消息个数。当批次被填满,批次里的所有消息会被发送出去。不过生产者并不一定都会等到批次被填满才发送,半满的批次,甚至只包含一个消息的批次也可能被发送。所以就算把 batch.size 设置的很大,也不会造成延迟,只会占用更多的内存而已,如果设置的太小,生产者会因为频繁发送消息而增加一些额外的开销。

4.max.request.size

该参数用于控制生产者发送的请求大小,它可以指定能发送的单个消息的最大

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

值,也可以指单个请求里所有消息的总大小。 broker 对可接收的消息最大值也有自己的限制( message.max.size ),所以两边的配置最好匹配,避免生产者发送的消息被 broker 拒绝。

总结

本章主要讲了生产者客户端的用法以及整体流程架构,主要内容包括配置参数的详解消息的发送方式序列化器分区器拦截器等,在实际使用中,Kafka已经提供了良好的Java客户端支持,提高了开发效率。

参考资料:《Kafka技术手册》
免费获取方式:私信【资料】免费获取
还有更多Java PDF学习资料等你来拿!!!

还有更多Java PDF学习资料等你来拿!!!**


http://www.niftyadmin.cn/n/1593633.html

相关文章

2.7-mysql主从配置-1

MySQL 主从原理非常简单,总结一下:每个从仅可以设置一个主。主在执行 sql 之后,记录二进制 log 文件(bin-log)。从连接主,并从主获取 binlog,存于本地 relay-log,并从上次记住的位置…

mysql5,java中级工程师面试

下载下来的文件名是 mysql-installer-community-5.7.24.0.msi 双击文件名称进行安装 如果提示如下错误 说明.NET4.5.2未安装 需要安装此插件 报错窗口有网址 直接安装即可 ![](https://img-blog.csdnimg.cn/20210427122332443.png?x-oss-processimage/watermark,type_ZmFu 《…

linux 未声明的变量,linux – Makefile变量替换显然没有完成,即使:=在声明中使用...

我有一个主内核模块,其他内核模块与之通信.我已经构建了这样的模块(概念上):main module/|\drivers/||\driver1|\driver2\driver3由于这些是内核模块,我需要像这样编译它们:make -C /lib/modules/$(shell uname -r)/build M$(shell pwd) modules但是,由于…

Netty编解码开发+多协议开发和应用+源码,基础和进阶的区别

第3章Netty入门应用 Netty开发环境的搭建 服务端程序TimeServer开发 客户端程序TimeClient开发 时间服务器的运行和调试 第4章TCP粘包/拆包问题的解决之道 TCP粘包/拆包的基础知识 没考虑TCP粘包/拆包的问题案例 使用Netty解决读半包问题 第5章分隔符和定长解码器的应用…

linux screen多用户,Linux 技巧:使用 Screen 管理你的远程会话

管理你的远程会话先来看看如何使用screen解决SIGHUP问题,比如现在我们要ftp传输一个大文件。如果按老的办法,SSH登录到系统,直接ftp命令开始传输,之后。。如果网络速度还可以,恭喜你,不用等太长时间了&…

Redis从入门到精通,至少要看看这篇,java开发面试常见问题

例: SCAN 0 MATCH test* COUNT 10 //每次返回10条以test为前缀的key 如何通过 Redis 实现分布式锁 分布式锁 分布式锁是控制分布式系统之间共同访问共享资源的一种锁的实现。如果一个系统,或者不同系统的不同主机之间共享某个资源时,往往…

intel linux核显性能,Intel处理器核显获神油优化 Linux下性能提升20%

日前报道过有程序员在Linux系统上玩上了魔兽世界、DOTA2、CSGO等Windows系统下的游戏,性能还不错。不过相对Windows系统来说,Linux下玩游戏总体上还是有点难度的,图形显卡驱动就是个问题,性能普遍不如Win系统,好消息是…

Linux下tomcat服务

一:Linux下tomcat服务的启动、关闭与错误跟踪,使用PuTTy远程连接到服务器以后,通常通过以下几种方式启动关闭tomcat服务:切换到tomcat主目录下的bin目录(cd usr/local/tomcat/bin)1,启动tomcat服…