Kafka事务提交位点失败

记一次kafka事务提交失败

线上业务报错:

2019-10-29/20:27:48.621|l-fin-ycb-sync-server1.toc.pre.ali.dm|-|-|^_^|[org.springframework.kafka.KafkaListenerEndpointContainer#1-1-C-1] ERROR o.s.k.l.KafkaMessageListenerContainer$ListenerConsumer 864 - Consumer exception
org.springframework.kafka.KafkaException: Stopped container; nested exception is java.lang.RuntimeException: Transaction rollback,cant be recovered,ListenerContainer will be aborted,you should restart application!
        at org.springframework.kafka.listener.ContainerStoppingBatchErrorHandler.handle(ContainerStoppingBatchErrorHandler.java:64)
        at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.handleConsumerException(KafkaMessageListenerContainer.java:856)
        at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:709)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: Transaction rollback,cant be recovered,ListenerContainer will be aborted,you should restart application!
        at com.vipkid.commons.springboot.kafka.KafkaClientConfiguration$AbortedAfterRollbackProcessor.process(KafkaClientConfiguration.java:202)
        at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.batchAfterRollback(KafkaMessageListenerContainer.java:1002)
        at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeBatchListenerInTx(KafkaMessageListenerContainer.java:989)
        at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeBatchListener(KafkaMessageListenerContainer.java:944)
        at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:930)
        at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.pollAndInvoke(KafkaMessageListenerContainer.java:749)
        at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:698)
        ... 3 common frames omitted
Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not create Kafka transaction; nested exception is org.apache.kafka.common.errors.TimeoutException: Timeout expired while initializing transactional state in 30000ms.
        at org.springframework.kafka.transaction.KafkaTransactionManager.doBegin(KafkaTransactionManager.java:150)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:378)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:137)
        at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeBatchListenerInTx(KafkaMessageListenerContainer.java:957)
        ... 7 common frames omitted

Broker端日志报错:

[] ERROR [ReplicaManager broker=4] Error processing append operation on partition __transaction_state-32 (kafka.server.ReplicaManager)
org.apache.kafka.common.errors.NotEnoughReplicasException: Number of insync replicas for partition __transaction_state-32 is [1], below required minimum [2]

根据日志提示,发现__transaction_state 这个topic的副本数为1,小于最小同步副本数2.
消费者并没有配置这个最小副本数,上官网一查,默认值果然是2。

解决方案:将__transaction_state这个topic的副本数扩充

发布了55 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq422243639/article/details/102864003
今日推荐