kafkatemplate无法注入_Spring Boot和Kafka实战自定义复杂配置示例

2023-11-06

这篇博客文章展示了如何配置Spring Kafka和Spring Boot以使用JSON发送消息并以多种格式接收它们:JSON,纯字符串或字节数组。基于此配置,您还可以将Kafka生成器从发送JSON切换到其他序列化方法。

此示例应用程序还演示了同一消费组中三个Kafka消费者的使用情况,因此消息在三者之间进行负载平衡。每个消费者实现不同的反序列化方法。

您可以了解一些Kafka概念,如Consumer Group和Topic分区。

多个消费者

要更好地理解配置,请查看下图。如您所见,我们创建了一个包含三个分区的Kafka主题。在消费者方面,只有一个应用程序,但它实现了具有相同group.id 属性的三个Kafka消费者。

当我们启动应用程序时,Kafka会为每个消费者分配一个不同的分区。消费者组将以负载平衡的方式接收消息。在这篇文章的后面,如果我们让它们具有不同的组标识符,你会看到有什么区别(如果你熟悉Kafka,你可能知道结果)。

示例用例

我们要构建的逻辑很简单。每次我们调用指定REST端点hello,应用程序将生成可配置数量的消息,并使用序列号作为Kafka密钥将它们发送到同一主题,等待消费所有消息后返回Hello Kafka!

设置Kafka和Spring Boot

首先,您需要有一个正在运行的Kafka集群才能连接。对于这个应用程序,我将在单个节点中使用docker-compose和Kafka。这显然远不是一个生产配置,但它足以满足这篇文章的目标。

以下是docker-compose.yml配置

version: '2'

services:

zookeeper:

image: wurstmeister/zookeeper

ports:

- "2181:2181"kafka:

image: wurstmeister/kafka

ports:

-"9092:9092"environment:

KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1

KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'

请注意,我将Kafka配置为不自动创建主题(最后一行配置)。我们将在Spring Boot应用程序创建我们的主题,因为我们想要传递一些自定义配置。如果你想玩玩这些Docker图像(例如使用多个节点),请查看wurstmeister/zookeeper图像文档

要启动Kafka和Zookeeper容器,只要在上述配置目录下运行 docker-compose up

获取SpringBoot应用程序骨架的最简单方法是到start.spring.io,使用使用YAML进行配置配置application.yml:

spring:

kafka:

consumer:

group-id: tpd-loggers

auto-offset-reset: earliest

# change this property if you are using your own

# Kafka cluster or your Docker IP is different

bootstrap-servers: localhost:9092

tpd:

topic-name: advice-topic

messages-per-request: 10

第一部分属性是Spring Kafka配置:

Kafka的组标识 group-id

auto-offset-reset 属性设置为earliest,这意味着当消费者没有发现偏移量(指针)时,消费者将开始从最早的消息中读取消息。

第三行用于连接Kafka的服务器,在这种情况下,如果您使用单节点配置,则是唯一可用的服务器。请注意,如果使用默认值 localhost:9092,则此属性是多余的 。

第二部分是特定于应用程序的自定义配置。我们定义Kafka主题名称以及每次执行HTTP REST请求时要发送的消息数。

Message类

这是我们将用作Kafka消息的Java类。这里没有什么复杂的,只是@JsonProperty 在构造函数参数中带有注释的不可变类,  因此Jackson可以正确地反序列化它。

import com.fasterxml.jackson.annotation.JsonProperty;

public class PracticalAdvice {

private final String message;

private final int identifier;

public PracticalAdvice(@JsonProperty("message") final String message,

@JsonProperty("identifier") final int identifier) {

this.message = message;

this.identifier = identifier;

}

public String getMessage() {

return message;

}

public int getIdentifier() {

return identifier;

}

@Override

public String toString() {

return"PracticalAdvice::toString() {"+"message='"+ message + '\'' +", identifier="+ identifier +

'}';

}

}

Spring Boot中的Kafka Producer配置

为了简化应用程序,我们将在Spring Boot类中添加配置。最后,我们希望在此处包含生产者和消费者配置,并使用三种不同的变体进行反序列化。请记住,您可以在GitHub存储库中找到完整的源代码。

首先,让我们关注Producer配置:

@SpringBootApplication

public class KafkaExampleApplication {

public static void main(String[] args) {

SpringApplication.run(KafkaExampleApplication.class, args);

}

@Autowired

private KafkaProperties kafkaProperties;

@Value("${tpd.topic-name}")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kafkatemplate无法注入_Spring Boot和Kafka实战自定义复杂配置示例 的相关文章

  • 区块链改革杭州闭门会议——分享链改机遇,探讨价值联动!

    2018年8月19日14点 区块链改革 链改 闭门会暨链改超级节点 杭州 会议在杭州钱江新城华润大厦隆重召开 大会围绕 分享链改机遇 探讨价值联动 为主题 展开系列讨论 基于各界对区块链赋能实体经济的广泛共识 和区块链赋能实体经济场景的逐步
  • python计算距今时间

    计算距今时间 计算一个 ISO 8601 格式的时间字符串距离今天的天数 import datetime 定义时间字符串 time str 2023 08 03T09 30 29 359 08 00 解析时间字符串为datetime对象 d
  • 关于openldap/bdb的一些配置和维护的问题

    一 配置部份在基本配置完成之后 可以在slapd conf设置一些提高安全和效率的选项 cachesize 5000 checkpoint 1024 5 cachesize是ldap在内存中缓存的记录条数 这个缓存是openldap自己维护
  • GMTC分享——当插件化遇到 Android P

    转自 https blog csdn net xinzhou201 article details 80881604 GMTC分享 当插件化遇到 Android P 手机京东技术团队 2018 06 30 举报 前言 Android P 来
  • 用Python写爬虫就很low?你赞同嘛?

    之前换了份工作 不再是单纯的Web开发了 要学习的东西真的挺多的 入职的第1天 就让我入手写个爬虫 只是这个爬虫没有采集几个亿数据量的业务场景 之前换了份工作 不再是单纯的Web开发了 要学习的东西真的挺多的 入职的第1天 就让我入手写个爬
  • 总结flutter玩转之-flutter 调用安卓原生view(使用AndroidView)

    总结flutter玩转之 fluuter 调用安卓原生view 使用AndroidView 1 假设你已经熟悉fluuter 开发熟悉dart 语言 android 原生开发技能 1 在安卓原生项目添加代码 1 创建一个原生view 比如说
  • 什么是MIPI接口

    什么是MIPI接口 摘要 随着客户要求手机摄像头像素越来越高同时要求高的传输速度传统的并口传输越来越受到挑战 提高并口传输的输出时钟是一个办法但会导致系统的EMC设计变得越来困难增加传输 手机摄像头MIPI技术介绍 随着客户要求手机摄像头像
  • Postgresql一行变多行unnest与string_to_array,多行变一行string_agg

    Postgresql一行变多行unnest与string to array 多行变一行string agg 1 源码 创建表 create table tb id int value varchar 30 插入数据 insert into
  • vscode c++ string报错ERROR: Unable to start debugging. Unexpected GDB output from command “-exec-run“.

    尝试用vscode配值c 环境 配通之后可以hello world了 但是cout string类型的变量时总是闪退 看了下调试控制台上报错 ERROR Unable to start debugging Unexpected GDB ou
  • BI开发步骤

    BI开发如何快速接入 在数据中台项目中 我们会频繁接触BI工具并需要进行开发接入 BI工具种类繁多 因此如果能快速学习完成开发 则能大大提升效率 1 BI工具通用的开发步骤 数据源接入 数据集配置 分为常规数据集和SQL数据集 仪表盘配置
  • C语言游戏---小猫钓鱼

    A和B两个同学玩简单的纸牌游戏 每人手里有n张牌 两人轮流出牌并依次排列在桌面上 每次出掉手里的第1张牌 出牌后如果发现桌面上有跟刚才打出的牌的数字相同的牌 则把从相同的那张牌开始的全部牌按次序放在自己手里的牌的末尾 当一个人手中的牌先出完
  • 将开源clucene引擎编译成动态库

    本章介绍如何将clucene编译成动态库 开发桌面级的全文检索引擎 1 准备工具 编译平台 windows 10 代码编译工具 vs2010 CMake版本 cmake 3 17 1 win64 x64 源代码版本 clucene core
  • C++ 模板类和友元

    模板类的友元分三类 1 非模板友元 2 约束模板友元 即友元的类型取决于类被实例化时的类型 3 非约束模板友元 即友元的所有具体化都是类的每一个具体化的友元 1 模板类的非模板友元函数 count 函数不是通过对象调用的 它是友元不是成员函
  • QT中css样式

    QLabel 字体左对齐 QLabel qproperty alignment AlignLeft 字体居中 QLabel qproperty alignment AlignCenter 字体右对齐 QLabel qproperty ali
  • 基于FiscoBcos v3.0.1 pro版的host网络模式集群环境搭建

    安装软件 更新 最新版本系统软件 yum update y 安装docker yum install y yum utils device mapper persistent data lvm2 设置yum源 yum config mana
  • python+unittest+HTMLReopertRunner生成测试报告

    1 安装HTMLReport 在线安装 使用pip命令安装HTMLReport 命令 pip install HTMLReport 安装好的位置在 Python安装路径下的Lib site packages下 离线安装 直接将下载好的HTM
  • 现在上车音视频开发还来得及吗?论音视频开发的的前景趋势!

    一 行业现状 核心竞争力 定义音视频是程序届的皇冠 掌握音视频意味着拿到通往未来的船票 不用担心会被其他人替代 音视频是有门槛的 是与其他人拉开差距的分水岭 高端人才相关缺乏 Boss直聘中 北上广深很多年限上50w 70w的音视频岗位 常
  • Sqlilabs-22

    这里来到了第一阶段的最后一关 22 关 其实跟 21 关一样 只不过变成了双引号 而已 直接上菜吧o uname YWRtaW4iIGFuZCBleHRyYWN0dmFsdWUoMSxjb25jYXQoMHg3ZSwoc2VsZWN0IGR

随机推荐

  • 数字后端学习之SDC

    SDC是一个设计中最重要的文件 为什么这么说呢 ppa大家知道把 sdc就是要对ppa进行约束 那sdc有哪些具体的内容呢 1 描述芯片的工作速度 包括 create clock create generate clock 要知道clock
  • 华为OD机试 Python 称砝码

    题目 你有一些不同的砝码 每个砝码都有自己的重量和数量 试问 用这些砝码 你可以得到多少种不同的重量组合 输入 第一行给出砝码的种类数 n 1 n 10 第二行按顺序列出每种砝码的重量 重量范围为 1 m 2000 第三行按顺序列出每种砝码
  • 商品推荐(内容过滤 + 协同过滤)

    目录 1 名词列表 2 协同过滤 2 1 基于物品的协同过滤 itemCF 2 1 1 数据模型 2 1 2 商品相似度矩阵生成 2 1 3 推荐策略 2 2 基于用户的协同过滤 userCF 2 2 1 数据模型 2 2 2 用户相似度矩
  • Hive/MaxCompute SQL性能优化(三):数据倾斜优化实战

    SQL性能优化系列 Hive MaxCompute SQL性能优化 一 什么是数据倾斜 Hive MaxCompute SQL性能优化 二 如何定位数据倾斜 前面介绍了如何定位数据倾斜 本文介绍如果遇到各种数据倾斜的情况该怎样优化代码 Ma
  • LINUX基础试题大全(3)

    说明 此文章由于题数庞大 为方便阅读本人将其分为四篇文章为大家分享 答案会今后不断进行更新 LINUX基础试题大全 1 填空题题 LINUX基础试题大全 2 单项选择题 LINUX基础试题大全 3 简答 LINUX基础试题大全 4 数据结构
  • C语言指针数组和数组指针[转]

    ps 文章属于总结性前 第一部分部分来自于 http www cnblogs com hongcha717 archive 2010 10 24 1859780 html 数组指针 也称行指针 定义 int p n 优先级高 首先说明p是一
  • 车载通信——J1939故障码

    一 诊断 UDS是统一诊断系统 冻结帧 出现故障码时 ECU存储故障码出现时的数据 就是冻结帧 二 J1939故障诊断 SAE J1939应用层定义了12种诊断报文 Diagnostic Message DM 诊断故障码 DTC 故障码 可
  • eval(function(p,a,c,k,e,d) javascrip类型代码 解决办法

    eval function p a c k e d e function c return c35 String fromCharCode c 29 c toString 36 if replace String while c d e c
  • 均衡器--时域均衡,频域均衡,无限长迫零(Zero force\ZF)均衡器,有限长时域迫零(ZF)均衡器,无限长MSE均衡器

    均衡器 1 原因 2 线性均衡器 2 1时域均衡 2 2频域均衡 3 均衡器 3 1无限长迫零 Zero force ZF 均衡器 3 2有限长时域迫零 ZF 均衡器 3 3无限长MSE均衡器 4 性能比较 1 原因 之前讨论的是在AWGN
  • 【GitHubShare】适合练习python的编程类网站,可以边学边玩

    非常有意思的编程网站 leetcode pythontip Coding Games Codewars CodeCombat Checkio Cyber Dojo pythonchallenge Code Monkey leetcode l
  • 【Docker】Docker中启动redis

    1 使用命令 docker pull redis 来下载redis镜像 2 通过命令 docker images来查看redis镜像是否安装成功 3 安装成功后通过 docker run name java redis d redis 来运
  • 客户异常数据清洗详细教程——pandas

    前言 在不同行业中 我们经常会遇到一个麻烦的问题 数据清洗 尤其是当我们需要处理客户编码异常数据时 这个问题变得尤为重要 想象一下 许多银行都是以客户为单位管理数据的 因此每个客户都有一个独特的编码 在处理这些数据时 我们常常会面临以下问题
  • 前端常用的CSS工具库

    1 animista 在线查看自己需要的动画效果 比较常用 直接复制代码即可 官网 Animista CSS Animations on Demand 2 Animate css是一个现成的跨浏览器动画工具库 可用于您的 Web 项目 非常
  • 攻防世界:command_execution

    首先掌握命令执行漏洞 Command Execution 的知识 命令执行漏洞即使用者可以直接在Web应用中执行系统命令 从而获取敏感信息或者拿下shell权限 其造成的原因是Web服务器对用户输入命令安全检测不足 比如没加waf 导致恶意
  • matlab 指定坐标轴,matlab设置坐标轴范围

    设置x轴和y轴为想要的显示范围 可以使用set函数 以x轴的显示范围为0到10 y轴的显示范围为90到101为例 设置x轴范围和刻度 set gca XLim 0 10 X轴的数据显示范围 set gca XTick 0 1 10 设置要显
  • Flutter键盘遮挡输入框问题

    以下代码是在网上看到的 忘记具体的出处了 请谅解 作者 Created by H on 2019 1 23 11 08 介绍 解决输入框被遮挡问题 import package flutter material dart import pa
  • C++面向对象设计原则学习笔记

    原则一 依赖倒置原则 DIP 高层模块 稳定 不应该依赖于底层模块 变化 二者都应该依赖于抽象 稳定 抽象 稳定 不应该依赖于实现细节 变化 实现细节应该依赖于抽象 稳定 原则二 开放封闭原则 OCP 对外扩展开放 对更改封闭 类模块应该是
  • 取模!了解一下!

    嘤嘤嘤 快速幂取模都不会了 自闭了 取模运算 Modulo Operation 和取余运算 Complementation 两个概念有重叠的部分但又不完全一致 主要的区别在于对负整数进行除法运算时操作不同 取模主要是用于计算机术语中 取余则
  • 面向对象-继承

    继承 概念 继承父类的属性和行为 使得子类对象可以直接具有与父类相同的属性 相同的行为 子类可以直接访问父类中的非私有的属性和行为 继承是多态的前提 如果没有继承 就没有多态 特点 java只能单继承 但可以多层继承 a继承b b继承c 那
  • kafkatemplate无法注入_Spring Boot和Kafka实战自定义复杂配置示例

    这篇博客文章展示了如何配置Spring Kafka和Spring Boot以使用JSON发送消息并以多种格式接收它们 JSON 纯字符串或字节数组 基于此配置 您还可以将Kafka生成器从发送JSON切换到其他序列化方法 此示例应用程序还演