当前位置: 首页 > news >正文

@KafkaListener注解详解(一)| 常用参数详解

@KafkaListener 注解提供了许多可配置的参数,以便更灵活地定制 Kafka 消息监听器的行为。

topics:

描述: 指定监听的 Kafka 主题,可以是一个字符串数组。这是最基本的参数,它定义了监听器将从哪个或哪些主题接收消息。

例子: @KafkaListener(topics = "my-topic")

groupId:

描述: 指定 Kafka 消费者组的 ID。每个消费者都有自己所属的组。一个组中可以有多个消费者。

例子: @KafkaListener(groupId = "my-group", topics = "my-topic")

id:

描述: 每个Listener实例的重要标识。默认是一个自动生成的唯一 ID。如果不指定groupId,那么id将直接作为groupId。在同一应用中,如果有多个监听器,可以使用不同的id来标识不同的监听器容器。

例子: @KafkaListener(id = "myListener", topics = "my-topic")

concurrency:

描述: 指定并发消费者的数量,即监听器容器的线程数。控制监听器的并发性,每个线程会创建一个消费者实例。较大的并发性可以提高消息处理的吞吐量。

例子: @KafkaListener(topics = "my-topic", concurrency = "3")

containerFactory:

描述: 指定用于创建监听器容器的工厂类。可以用于配置监听器容器的属性。通过设置 containerFactory,可以更灵活地配置监听器容器的一些属性,例如消息转换器、错误处理器等。(移步另外一篇关于工厂类的文章

例子: @KafkaListener(topics = "my-topic", containerFactory = "myContainerFactory")

autoStartup:

描述: 指定是否在启动时自动启动监听器容器。默认是 true。如果设置为false,则需要手动调用容器的start() 方法来启动监听器。(移步另外一篇关于改变kafka运行状态的文章

例子: @KafkaListener(topics = "my-topic", autoStartup = "false")

clientIdPrefix:

描述: 指定 Kafka 消费者的客户端 ID 前缀。可以通过设置clientIdPrefix来自定义消费者的客户端 ID。

例子: @KafkaListener(topics = "my-topic", clientIdPrefix = "my-client")

containerGroup:

描述: 指定监听器容器所属的组。如果有多个应用使用相同的消费者组,可以通过设置 containerGroup来区分它们。

例子: @KafkaListener(topics = "my-topic", containerGroup = "my-group")

errorHandler:

描述: 指定错误处理器,用于处理监听器方法抛出的异常。定义一个错误处理器,可以在发生异常时进行自定义处理。

例子: @KafkaListener(topics = "my-topic", errorHandler = "myErrorHandler")

properties:

描述: 指定其他的消费者配置属性,以键值对的形式提供。这种方式允许你通过注解的方式灵活地设置特定的消费者属性,而不必在全局配置文件中进行设置。请确保设置的属性是合法的 Kafka 消费者属性,并符合你的应用需求。

例子: @KafkaListener(topics = "my-topic", properties = {"enable.auto.commit=false", "auto.offset.reset=earliest"})


这些参数可以根据实际需求进行组合和配置,以满足特定场景的要求。例如,通过调整 concurrency 可以控制监听器的并发性,通过设置 autoStartup 可以控制监听器容器是否在应用启动时自动启动。其他参数也可以根据需要进行调整。

DEMO

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;@Service
public class KafkaConsumerService {@KafkaListener(topics = "my-topic", groupId = "my-group")public void listen(ConsumerRecord<String, String> record) {System.out.println("Received message: " + record.value());}
}

关于ConsumerRecord<?, ?> record的介绍参考:url

@KafkaListener注解应用于listen方法,指定要监听的Kafka主题和消费者组ID。

在application.properties中配置Kafka连接信息:

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=my-group

关于kafka在application.properties配置参数的介绍参考:url

相关文章:

  • “谐波”分析治理,电能质量在线监测
  • ‘XXX‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 系统找不到指定的路径。
  • PO设计模式详解(Python+selenium+unittest)
  • graylog日志分析配置(1)
  • 接口自动化测试操作流程
  • OpenCV中更稳更快的边缘检测方法,快速查找线、圆、椭圆--EdgeDrawing-C++代码
  • 【深度学习环境】windows安装 NVIDIA Docker
  • 【python】9个python进阶技巧(实用)
  • Outlook如何删除邮箱账户
  • 石英增强光声光谱气体传感技术中的高精密压力控制解决方案
  • Redis学习笔记10:基于spring的Lettuce redis客户端Pipelining管道
  • centos7 yum安装python3.9时报错【没有可用软件包 python3.9。 错误:无须任何处理】
  • 开放领域问答机器人2——开发流程和方案
  • 【避雷选刊】Springer旗下2/3区,2个月录用!发文量激增,还能投吗?
  • 使用matlab实现图像信号的色彩空间转换
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • jquery cookie
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 基于axios的vue插件,让http请求更简单
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 《码出高效》学习笔记与书中错误记录
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​520就是要宠粉,你的心头书我买单
  • #大学#套接字
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $().each和$.each的区别
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (AngularJS)Angular 控制器之间通信初探
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (编译到47%失败)to be deleted
  • (待修改)PyG安装步骤
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm码农论坛 毕业设计 231126
  • (六)Hibernate的二级缓存
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)jQuery 基础
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .net core 依赖注入的基本用发
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .Net环境下的缓存技术介绍
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @Repository 注解
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [Android Studio] 开发Java 程序
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [CISCN 2023 初赛]go_session