线上业务报错:
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 omittedBroker端日志报错:
[] 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的副本数扩充
