Java Spring Boot 2.1.3 实战Kafka配置文件server.properties参数解析

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
日志服务 SLS,月写入数据量 50GB 1个月
云原生网关 MSE Higress,422元/月
简介: Java Spring Boot 2.1.3 实战Kafka配置文件 server.properties 参数解析。kafka参数日志清理、垃圾回收、连接池、线程模型都是非常重要的并发因素。

Apache Kafka是开源分布式高并发消息中间件,支持每秒百万级消息并发,在互联网高并发架构:双11、电商秒杀抢购、网络直播、IOT大数据采集、聊天App、导航等高并发架构中大量使用。
image

生产环境一般要求搭建Kafka集群。Java开发Kafka集群需要注意参数的详细配置,Kafka参数的含义在配置集群的时候非常重要,尤其是关系性能和集群的参数。下面我们一起来看看Kafka的详细参数。

Kafka服务器基础配置

broker的身份ID。必须为每个代理设置一个唯一的整数。集群配置时候非常重要。不能重复。
broker.id = 1

Kafka套接字服务器配置

Kafka服务器套接字服务器侦听的地址。 如果未配置,就会使用java.net.InetAddress.getCanonicalHostName()地址。格式:
#listeners = listener_name:// host_name:port
例如:

listeners = PLAINTEXT://localhost:9092

listeners = PLAINTEXT://localhost:9091

Broker向生产者和消费者通告的主机名和端口。如果没有设定,它将使用“侦听器”的值。否则,它将使用该值从java.net.InetAddress.getCanonicalHostName()返回的地址。
#advertised.listeners = PLAINTEXT://host.name:9092

Kafka侦听器名称映射到安全协议,默认为它们是相同名称
#listener.security.protocol.map = PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL

服务器用于从网络接收请求并向网络发送响应消息的线程数
num.network.threads = 3

服务器用于处理请求的线程数,可能包括磁盘I / O需要的线程.
num.io.threads = 8

套接字服务器使用的发送缓冲区(SO_SNDBUF)大小,字节。
socket.send.buffer.bytes = 102400

套接字服务器使用的接收缓冲区(SO_RCVBUF)大小,字节。
socket.receive.buffer.bytes = 102400

套接字服务器将接受的请求的最大大小(防止OOM内存溢出)大小,字节。
socket.request.max.bytes = 104857600

Kafka日志配置

逗号分隔的目录列表,用于存储日志文件
log.dirs =。/日志

每个主题的默认日志分区数。更多分区允许更大并行处理消息,但这也会导致更多的文件
num.partitions = 1

在启动时用于日志恢复和在关闭时刷新的每个数据目录文件夹需要的线程数。
#对于数据目录文件夹位于RAID阵列中的情况,建议增加此线程数值。
num.recovery.threads.per.data.dir = 1

Kafka内部主题配置

Topic主题的消费者的group元数据复制因子,"__consumer_offsets" 和"__transaction_state" 。
offsets.topic.replication.factor = 1
transaction.state.log.replication.factor = 1
transaction.state.log.min.isr = 1

Kafka日志刷新政策配置

Kafka消息立即写入文件系统,但默认情况下我们只有fsync()来缓慢延迟地同步操作系统缓存消息到磁盘上。 以下配置参数控制将消息数据刷新到磁盘过程。这里有一些重要的权衡:
1、持久性:如果Kafka不使用复制,则可能会丢失未刷新的数据。
2、延迟:当Kafka刷新确实发生时,非常大的刷新间隔可能会导致延迟峰值,因为会有大量数据需要刷新到磁盘,间隔太久缓冲消息越多。
3、吞吐量:Flush通常是最昂贵的操作,并且小的Flush间隔可能导致过多的磁盘IO操作搜索。
下面以下设置允许配置刷新策略以在一段时间后或每N条消息(或两者)刷新数据。这可以在全局范围内配置完成,也可以针对每个主题的单独配置。

#强制刷新数据到磁盘之前要接受的消息数,10000消息时批量刷盘
#log.flush.interval.messages = 10000

#强制刷新之前消息可以在日志中停留的最长时间 1000毫秒
#log.flush.interval.ms = 1000

Kafka日志保存策略

以下配置参数控制Kafka日志段的处理策略,我们可以设置为在一段时间后或在累积给定大小后删除日志数据段。只要满足一下任意条件,就会删除一个日志段。删除总是从日志的末尾开始。

log log的最小时间长度,超过删除日志。
#由于时间可以删除的日志文件的最小年龄 168小时
log.retention.hours = 168

基于大小的日志保留策略。 除非剩余的段大小在log.retention.bytes之下,否则将从日志中删除段。 功能独立于log.retention.hours限制。
#log.retention.bytes = 1073741824

#日志段文件的最大大小。达到此大小时,将创建新的日志段。
log.segment.bytes = 1073741824

#检查日志段以查看是否可以删除日志段的时间间隔
#保留策略
log.retention.check.interval.ms = 300000

Zookeeper参数设置

Zookeeper连接字符串。默认单台设置,集群需要多台,逗号分隔的主机:端口,每个对应一个Zookeeper。例如“127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002”。
#所有kafka znodes的根目录。集群设置模式
zookeeper.connect =localhost:2181,localhost:2182,localhost:2183

连接到zookeeper的超时时间(以毫秒为单位)
zookeeper.connection.timeout.ms = 6000

kafka Group协调配置

以下配置指定GroupCoordinator将延迟初始消费者重新平衡的时间(以毫秒为单位)。
#当新成员加入组时,重新平衡延迟是group.initial.rebalance.delay.ms的值,最多max.poll.interval.ms。
默认值为3秒。我们将此参数设置为0,方便开发和测试。但是生产环境中默认值推荐3秒更合适,因为这有助于避免在应用程序启动期间不必要且可能很昂贵的重新平衡过程,减少系统资源的消耗。
group.initial.rebalance.delay.ms = 0

在集群和优化情况下需要了解每个参数的确切含义,对于Kafka集群的设置,需要配置多个Zookeeper地址。默认的日志清理、垃圾回收、连接池、线程模型都是非常重要的因素。
使用最新的Java Spring Boot 2.x版本连接Kafka需要在配置文件中修改地址参数:

spring.kafka.consumer.group-id=myGroup
spring.kafka.bootstrap-servers=localhost:9091,localhost:9092,localhost:9093

参考文档 http://kafka.apache.org/
8、阿里巴巴Java群超过2900人
直播地址:Java技术进阶群
进群方式:钉钉扫码入群
image

阿里巴巴MongoDB群
image

目录
相关文章
|
11天前
|
Java 对象存储 开发者
解析Spring Cloud与Netflix OSS:微服务架构中的左右手如何协同作战
Spring Cloud与Netflix OSS不仅是现代微服务架构中不可或缺的一部分,它们还通过不断的技术创新和社区贡献推动了整个行业的发展。无论是对于初创企业还是大型组织来说,掌握并合理运用这两套工具,都能极大地提升软件系统的灵活性、可扩展性以及整体性能。随着云计算和容器化技术的进一步普及,Spring Cloud与Netflix OSS将继续引领微服务技术的发展潮流。
25 0
|
22天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
178 37
|
22天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
22天前
|
缓存 Java 数据库
【Java面试题汇总】Spring篇(2023版)
IoC、DI、aop、事务、为什么不建议@Transactional、事务传播级别、@Autowired和@Resource注解的区别、BeanFactory和FactoryBean的区别、Bean的作用域,以及默认的作用域、Bean的生命周期、循环依赖、三级缓存、
【Java面试题汇总】Spring篇(2023版)
|
12天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
563 7
|
8天前
|
存储 缓存 Java
在Spring Boot中使用缓存的技术解析
通过利用Spring Boot中的缓存支持,开发者可以轻松地实现高效和可扩展的缓存策略,进而提升应用的性能和用户体验。Spring Boot的声明式缓存抽象和对多种缓存技术的支持,使得集成和使用缓存变得前所未有的简单。无论是在开发新应用还是优化现有应用,合理地使用缓存都是提高性能的有效手段。
15 1
|
10天前
|
消息中间件 NoSQL 安全
(转)Spring Boot加载 不同位置的 application.properties配置文件顺序规则
这篇文章介绍了Spring Boot加载配置文件的顺序规则,包括不同位置的application.properties文件的加载优先级,以及如何通过命令行参数或环境变量来指定配置文件的名称和位置。
|
7天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
21 2
|
11天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
|
16天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。

推荐镜像

更多
下一篇
无影云桌面