文章目录

  • Producer factory does not support transactions
    • 异常原因
    • 解决方案
  • Must set retries to non-zero when using the idempotent producer.
    • 解决方案
  • Must set acks to all in order to use the idempotent producer. Otherwise we cannot guarantee idempotence.
    • 解决方案
  • No transaction is in process; possible solutions: run the template operation within the scope of a template.executeInTransaction() operation, start a transaction with @Transactional before invoking the template method, run in a transaction started by a listener container when consuming a record
    • 解决方案
  • a KafkaTemplate is required to support replies
    • 解决方案

Producer factory does not support transactions

java.lang.IllegalStateException: Producer factory does not support transactionsat org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-5.3.15.jar:5.3.15]at org.springframework.kafka.core.KafkaTemplate.executeInTransaction(KafkaTemplate.java:483) ~[spring-kafka-2.8.2.jar:2.8.2]at site.sunlong.kafkapractice.controller.KafkaController.sendTransactionMsg(KafkaController.java:53) ~[classes/:na]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_152]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_152]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_152]at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_152]at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.15.jar:5.3.15]at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.15.jar:5.3.15]at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.15.jar:5.3.15]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.15.jar:5.3.15]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.15.jar:5.3.15]at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.15.jar:5.3.15]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.15.jar:5.3.15]at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.15.jar:5.3.15]at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.15.jar:5.3.15]at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.15.jar:5.3.15]at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.56.jar:4.0.FR]at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.15.jar:5.3.15]at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.56.jar:4.0.FR]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.56.jar:9.0.56]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.15.jar:5.3.15]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar:5.3.15]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.15.jar:5.3.15]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar:5.3.15]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.15.jar:5.3.15]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar:5.3.15]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.56.jar:9.0.56]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.56.jar:9.0.56]at java.lang.Thread.run(Thread.java:748) [na:1.8.0_152]

异常原因

使用kafka事务发送消息的时候没有开启事务

解决方案

加事务前缀,自动给producer开启事务,所有加

# 事务前缀
spring.kafka.producer.transaction-id-prefix=tx_

Must set retries to non-zero when using the idempotent producer.

org.apache.kafka.common.config.ConfigException: Must set retries to non-zero when using the idempotent producer.

解决方案

# 重试次数
spring.kafka.producer.retries=3

Must set acks to all in order to use the idempotent producer. Otherwise we cannot guarantee idempotence.

org.apache.kafka.common.config.ConfigException: Must set acks to all in order to use the idempotent producer. Otherwise we cannot guarantee idempotence.at org.apache.kafka.clients.producer.ProducerConfig.maybeOverrideAcksAndRetries(ProducerConfig.java:459) ~[kafka-clients-3.0.0.jar:na]at org.apache.kafka.clients.producer.ProducerConfig.postProcessParsedConfig(ProducerConfig.java:420) ~[kafka-clients-3.0.0.jar:na]at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:114) ~[kafka-clients-3.0.0.jar:na]at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:133) ~[kafka-clients-3.0.0.jar:na]at org.apache.kafka.clients.producer.ProducerConfig.<init>(ProducerConfig.java:490) ~[kafka-clients-3.0.0.jar:na]at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:290) ~[kafka-clients-3.0.0.jar:na]at org.springframework.kafka.core.DefaultKafkaProducerFactory.createRawProducer(DefaultKafkaProducerFactory.java:863) ~[spring-kafka-2.8.2.jar:2.8.2]

解决方案

配置文件

# 应答级别:多少个分区副本备份完成时向生产者发送ack确认(可选01、all/-1)
spring.kafka.producer.acks=-1

No transaction is in process; possible solutions: run the template operation within the scope of a template.executeInTransaction() operation, start a transaction with @Transactional before invoking the template method, run in a transaction started by a listener container when consuming a record


java.lang.IllegalStateException: No transaction is in process; possible solutions: run the template operation within the scope of a template.executeInTransaction() operation, start a transaction with @Transactional before invoking the template method, run in a transaction started by a listener container when consuming a recordat org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-5.3.15.jar:5.3.15]at org.springframework.kafka.core.KafkaTemplate.getTheProducer(KafkaTemplate.java:726) ~[spring-kafka-2.8.2.jar:2.8.2]at org.springframework.kafka.core.KafkaTemplate.doSend(KafkaTemplate.java:638) ~[spring-kafka-2.8.2.jar:2.8.2]at org.springframework.kafka.core.KafkaTemplate.send(KafkaTemplate.java:403) ~[spring-kafka-2.8.2.jar:2.8.2]

解决方案

在方法上加@Transactional注解

 @Transactional@GetMapping("/transaction")public void sendTransactionMsg(@RequestParam String userId){String msg = " transaction "+userId;kafkaTemplate.executeInTransaction(new KafkaOperations.OperationsCallback<String, Object, Object>() {@Overridepublic Object doInOperations(KafkaOperations<String, Object> kafkaOperations) {kafkaOperations.send(KafkaTopicConstants.TEST_TRANSACTION , msg);
//                throw new RuntimeException("test transaction");return "";}});}

a KafkaTemplate is required to support replies

启动报错

java.lang.IllegalStateException: a KafkaTemplate is required to support repliesat org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-5.3.15.jar:5.3.15]at org.springframework.kafka.config.MethodKafkaListenerEndpoint.lambda$createMessageListener$1(MethodKafkaListenerEndpoint.java:180) ~[spring-kafka-2.8.2.jar:2.8.2]at org.springframework.kafka.support.JavaUtils.acceptIfNotNull(JavaUtils.java:71) ~[spring-kafka-2.8.2.jar:2.8.2]at org.springframework.kafka.config.MethodKafkaListenerEndpoint.createMessageListener(MethodKafkaListenerEndpoint.java:179) ~[spring-kafka-2.8.2.jar:2.8.2]at org.springframework.kafka.config.AbstractKafkaListenerEndpoint.setupMessageListener(AbstractKafkaListenerEndpoint.java:517) ~[spring-kafka-2.8.2.jar:2.8.2]at org.springframework.kafka.config.AbstractKafkaListenerEndpoint.setupListenerContainer(AbstractKafkaListenerEndpoint.java:500) ~[spring-kafka-2.8.2.jar:2.8.2]at org.springframework.kafka.config.AbstractKafkaListenerContainerFactory.createListenerContainer(AbstractKafkaListenerContainerFactory.java:384) ~[spring-kafka-2.8.2.jar:2.8.2]at org.springframework.kafka.config.AbstractKafkaListenerContainerFactory.createListenerContainer(AbstractKafkaListenerContainerFactory.java:69) ~[spring-kafka-2.8.2.jar:2.8.2]at org.springframework.kafka.config.KafkaListenerEndpointRegistry.createListenerContainer(KafkaListenerEndpointRegistry.java:228) ~[spring-kafka-2.8.2.jar:2.8

解决方案

ConcurrentKafkaListenerContainerFactory 没有设置replyTemplate

ConcurrentKafkaListenerContainerFactory containerFactory = new ConcurrentKafkaListenerContainerFactory();containerFactory.setReplyTemplate(kafkaTemplate);

kafka 使用及学习过程中的爬坑记录相关推荐

  1. centos7安装mysql日志空白_centos7安装Mysql爬坑记录 - G

    centos7安装Mysql爬坑记录 查看是否已安装 使用下列命令查看是否已经安装过mysql/mariadb/PostgreSQL 如果未安装,不返回任何结果(ECS的centos镜像默认未安装任何 ...

  2. mybatis-generator 详细配置及使用,爬坑记录

    mybatis-generator 详细配置及使用,爬坑记录 提示:如果不成功一定是项目路径和 数据库配置出问题,本篇基于 MySQL 8.0.13,调试没有问题. 如果失败,建议使用相同的项目结构, ...

  3. kotlin与java混合开发_使用kotlin和Java混合开发Android项目爬坑记录

    使用kotlin和Java混合开发Android项目爬坑记录 不定期将开发过程中遇到的问题添加在此处,加深记忆. 主要内容包括但不限于java与kotlin语言的一些区别,以及在使用android-s ...

  4. centos7 安装mysql8_CentOS7中安装MySQL8.0.21爬坑记录

    在CentOS7.3中安装了MySQL8.0.21之后,就开启了一段漫长的爬坑历程,简要回顾如下: 一.从Win10中用Navicat连接安装好的MySQL服务器 出现如下异常:1045 - Acce ...

  5. 03、Swagger2和Springmvc整合详细记录(爬坑记录)

    时间 内容 备注 2018年6月18日 基本使用 spirngmvc整合swagger2 开始之前这个系列博文基本是,在项目的使用中一些模块的内容记录,但是后期逐渐优化,不单单是整合内容. swagg ...

  6. win10 系统下安装ubuntu实现双系统爬坑记录

    谨以此教程纪念一下自己的爬坑之旅,如有问题,敬请大神指正; 不同电脑的配置和环境不同,本博客提供的方法仅供参考! 首先呢,基于想要在电脑上装一个实体Linux系统的夙愿,找了很多教程,得知个人电脑比较 ...

  7. win10下mediasoup搭建过程中的一些坑记录

    我们原来基于Janus的webrtc系统基本上可用了,系统目前最高到5万人同时在线,不过确实发现Janus的一些不足,对于我这种喜欢c++的人来说,看Janus的代码实在是比较痛苦,于是处于研究目的, ...

  8. ubuntu20安装gdb插件gef的爬坑记录

    0x00 环境 ubuntu20.04.2.0 0x01 踩坑过程 1.按照官网教程安装 官网地址:https://github.com/hugsy/gef 按照官网提示安装,wget报TLS连接错误 ...

  9. 微信退款 java工具类,微信支付中退款踩坑记录

    首先附上微信支付的开发者文档 其实这里所说的踩坑记录,无非就是微信在开发者文档上的写不太明确,也没有比较官方的demo,在此列出一个可行的demo,供大家下载使用. 主要问题就是在这几步解密上 微信的 ...

最新文章

  1. set和multiset容器
  2. mockito接口_什么是Mockito Extra接口?
  3. python r语言接口_R语言,python接口rpy2安装的问题
  4. 安装Windows NT4.0
  5. 如何总结和整理学术文献?
  6. 富士施乐Fuji Xerox DocuPrint M235 dw 驱动
  7. 范浩强树的学习历程,同时附加一个例题HDU4585shaolin
  8. 微信墙html5,微信墙怎么做?微信墙制作流程介绍
  9. ios native react 闪退_react-native-image-picker闪退的解决办法
  10. 《从零开始的记账本开发》第2篇 概要设计
  11. 计算机专业的职业探索,职业教育计算机教学的探索
  12. 苹果手机软件升级密码_金水区正规苹果手机怎么只换外屏价目表
  13. 安装DB2v10.5Express-C
  14. 科大星云诗社动态20210126
  15. 分类器的ROC曲线及相关指标(ROC、AUC、ACC)详解
  16. Python——(字符串)假设有一段英文,其中有单词中间的字母“i”误写为“I”,请编写程序进行纠正。
  17. 74194/74LS194 四位移位寄存器
  18. mw150um 驱动程序win10_mw150um驱动下载-MERCURY水星MW150UM 150M无线USB网卡驱动2.0 官方最新版-东坡下载...
  19. ruby , each,map,collect,inject,reject,select,shuffle[n..m],flatten
  20. 给孩子买台灯什么牌子好?盘点儿童灯具品牌排行榜

热门文章

  1. 小日期时间型_利于就业的汽车拆解技术服务师证报名时间、考试流程分几个级别?...
  2. C语言那些事之标点符号
  3. layer 关闭一个弹窗打不开新的的弹窗_电脑小技巧关闭FF弹窗
  4. realme真我笔记本Air官宣发布时间 将于7月12日发布
  5. Arduino中Serial.print()与Serial.write()函数的区别,以及串口通信中十六进制与字符串的收发格式问题和转换过程详解
  6. 如何查看手机登录IP地址
  7. mac SCp上传文件到阿里云服务器centos
  8. DOM初探(17)——查看元素的尺寸与位置
  9. Domino多瑙河EAP3以及Nomad Web 1.0.5
  10. Linux服务器期末复习总结