bootstrap-switch 不起作用 class处显示代码_注解KafkaListener不起作用,到底发生了啥?...
一,漫谈消息队列
众所周知,消息队列主要是用于消峰,解藕。同时也使得业务的处理方式为异步处理。常用的消息队列有rabbitmq,activemq,rocketmq,kafka等等,考虑到Kafka已经集成到了spring,因此在Java作为主要开发语言的场景,kafka的使用是最为常见的。在消息队列中通常有两种角色:生产者与消费者。而联系两者之间的枢纽则称为队列。考虑到多个队列的存在,每个队列通常都有一个ID进行区分。
二,kafka的基本概念与相当重要的offset
topic:在上一节说明每个队列有个ID,那么这个就是kafka队列的ID。
partition:分区是针对生产者而言,每个topic可以有多个分区,生产者发送消息分别发送到不同的分区。
group:分组是针对消费者而言,每个topic可以有多个分组,kafka能保证相同的topic和分区只能一个分组中同一个消费者消费,因此需要重复消费就必须另一个分组。
at most onece模式:消息最多消费一次。
at least onece模式:消息最少消费一次。
exactly onece模式:消息恰好消费一次,冥等。
offset:我们知道消费者需要记录消费进度,那么这个关键的属性就是offset,offset有手动提交和自动提交两种方式,而这两种方式和消息的前两种模式息息相关,本文暂不做解释。笔者采用的是自动提交的方式。
三,注解KafkaListener不起作用
笔者是采用springboot的方式使用kafka,具体搭建方法不了解可自行谷歌。而作为消费者处理通常为方法上注解KafkaListener。
现象:使用kafkamanager对comsumer进行查看:
% of partitions assigned to comsume 100
total lag 8
logsize 51 offset 43
同时,注解了KafkaListener的方法中的处理结果查询不到。再发送一条消息,发现lag和logsize均增加1,而offset依然为43。
一定是提交offset的设置改为手动提交了,而又粗心忘记写提交代码,这是笔者的第一反应,赶紧查看cloud config的配置文件,明晃晃地写着enable-auto-commit: true,一万点暴击。
笔者当然不会死心,第二个想法浮出脑海,处理超时导致无法正确提交offset,先改超时时长尝试,如果可以的话,处理改为压入任务队列或者线程池异步处理。一通修改和刷新操作,终于把cloud config改完了,然而理想丰满现实骨感,老问题依旧,再次一万点暴击。
最直接方式吧,远程调试,因为内测阶段可以任性。当然此步骤改为阿尔萨斯诊断也是可以的,只是略微繁琐些。注解的方法根本没有进去。这下一滴冷汗落在了地上,什么提交offset那都是镜中花水中月了。可是为什么comsumer是健康的状态呢。
查kafka和zookeeper的状态,重置manager,真是一顿操作猛如虎,现实结果二百五。
这下陷入好一阵子的迷茫,还好笔者不服输。查看和调试spring的源码,第一个断点选在了kafkacomsumer的方法poll中的comsumerrecords不为空的分支处,再次发送消息,命中断点!!心中总算泛起了一片曙光。单步进行调试,一开始的想法是一定是注解的方法没有被listener invoke。似乎一切都按照预想的步骤进行着
kafkacomsumer的poll→
KafkaMessageListenerContainer的invokeListener,而且records也是一个元素并且topic也正确,这又是为啥呢?我点开了records的元素,一个震惊的画面浮现在我面前key为null,value也是为null。豁然开朗,要么消息序列化失败,要么消息反序列化失败。查看序列化类kyro,笔者虽然蛮不喜欢这玩意,因为不跨语言,所以不如protobuf等,但是前任CTO选择的也无不可。先换吧,改成ObjectMapper的json先。结果出人意料还是不行!看来错怪了kyro。那么为啥呢,发送的对象是jsonobject,会不会和这个相关呢?抱着试试看的态度,换成class,成功了!!久违的结果啊。看了看手机已经很迟了,那还是先让大家回家吧。猜测和setAccessible有点关系,未证实,有答案的朋友要不吝赐教。共同进步。
到此问题终于解决了,希望读者也别再踏这个看似offset的坑。
bootstrap-switch 不起作用 class处显示代码_注解KafkaListener不起作用,到底发生了啥?...相关推荐
- bootstrap-switch 不起作用 class处显示代码_GTJ2018高频问题解答——第六弹:梁加腋箍筋显示、梁钢筋报表查看等问题...
点击上方蓝字关注我们,记得"星标"或"置顶"呦~ 梁 本期问题主要有: 梁加腋箍筋显示.梁钢筋报表查看.钢筋量与报表量不对应.渐变厚度筏板.悬挑梁钢筋量调整.悬 ...
- wpf时间显示代码_如何在ASP.NET和WPF中显示QR代码
wpf时间显示代码 I've half-jokingly said that there's never a good reason to use a QR Code. However, I'm wo ...
- c++吃豆人代码_山药豆的功效与作用营养功效
点击上方 蓝字 关注我们 山药豆(薯蓣科薯蓣)的叶腋间常生有肾形或卵圆形的珠芽,名"零余子"又称山药籽,俗称"山药豆.山药蛋",有食补作用.山药(薯蓣科薯蓣)的 ...
- h5评论直接显示代码_全套H5教程免费学,让你0基础自学制作H5页面
当前,H5页面已成为各大品牌及新闻媒体普遍采取的表现形式,它可以通过优质的内容.新颖的创意向用户推广产品.传播信息,并利用互联网的快速性,短时间内达到很高的浏览量和识别度.相较于H5而言,海报或视频设 ...
- php study 直接显示代码_《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12
18.9 管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PDO ...
- fpga驱动oled iic显示代码_【接口时序】6、IIC总线的原理与Verilog实现
欢迎FPGA工程师加入官方微信技术群 点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群 一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE ...
- java页面分页显示代码_通用分页jsp页面显示
注:本章内容都是在上一篇文章 通用分页后台显示:https://www.cnblogs.com/ly-0919/p/11058942.html 的基础上进行改进,所以有许多的类都在上一篇, 带来不便 ...
- Bootstrap Switch 开关控件
Bootstrap Switch开关控件网址:http://www.bootcss.com/p/bootstrap-switch/ 引入. Bootstrap Switch插件和依赖插件,并初始化开关 ...
- bug之bootstrap switch Uncaught TypeError: Cannot read property 'apply' of undefined
2019独角兽企业重金招聘Python工程师标准>>> <input type="checkbox" name="my-switch" ...
最新文章
- nagios监控三部曲之——为什么nagios不能发送报警邮件(2)
- Linux Graphic DRI 显示子系统 介绍1
- tomcat连接不上本地mysql_mysql连接不上tomcat
- CSS的子选择器与后代选择器的区别
- 数据库原理 知识点总结
- Java的新项目学成在线笔记-day14(四)
- python处理netcdf_在python中高效读取netcdf变量
- 读《代码整洁之道》前四章浅显印象 和 我所见的不整洁代码引以为戒
- 2-7 SpringBoot常用注解讲解
- 【程序设计】模块化的注意事项和不良实践
- 兼容IE和FF:获取Referer的JS和PHP方法 及 PHP利用curl伪造IP和来路
- 港股区块链板块持续上行,火币科技涨超50%
- 190311每日一句
- sql 创建存储过程
- WPS Office Pro v10.8.2.6726 绿色便携专业增强版
- 【论文翻译】Deep Learning
- busboy文件上传遇到的坑,已解决
- 田野调查手记·浮山摩崖石刻(二)
- Mac修改文件名的颜色
- Diagnosing OSGi uses conflicts
热门文章
- php可逆加密函数,简洁的PHP可逆加密函数
- jpa 原生sql 查询返回一个实体_spring data系列之jpa
- android viewpager 详解,详解Android App中ViewPager使用PagerAdapter的方法
- 二叉树构造c语言实现,递归创建二叉树c语言实现+详细解释
- server sql 统计信息 过时_sql-server – 何时更新统计信息?
- c语言学习进阶-C语言程序性能优化
- java提示需要标识符,java错误需要标识符
- 四六级考试中的计算机类文章,毕业设计论文-基于web的英语四六级模拟在线考试系统.doc...
- 如何对您的API进行单元测试
- java 复制文本内容_基于java文本复制的7种方式总结