Invalid transition attempted from state READY to state INITIALIZING

kafka 事务问题。

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

/**
 * @author: nko-sun
 * @Date: 2019/4/17 12:27
 * @Description:
 * Kafka生产者
 * 先启动生产者,发送消息到broker, 相关配置可以以配置文件独流的形式获取
 */

public class KafkaProducerConfiguration {

    //事务初始化一次
    public static  Producer buildProducer() {
        Properties props = new Properties();
        //broker地址
        props.put("bootstrap.servers", "192.168.1.160:9092,192.168.1.161:9092,192.168.1.162:9092");  // "localhost:9092"
        //请求时候需要验证
        props.put(ProducerConfig.ACKS_CONFIG, "all");
        //请求失败时候需要重试
        props.put("retries", 3);
        //内存缓存区大小
        props.put("buffer.memory", 33554432);
        //指定消息key序列化方式
        props.put("key.serializer",
                "org.apache.kafka.common.serialization.StringSerializer");
        //指定消息本身的序列化方式
        props.put("value.serializer",
                "org.apache.kafka.common.serialization.StringSerializer");
        // 设置事务id
        props.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, "first-transactional");
        // 设置幂等性
        props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG,true);
        props.put("client-id","officeKapi");
        Producer<String, String> producer = new KafkaProducer<String, String>(props);
        //需要各位注意这段代码
        producer.initTransactions();
        producer.beginTransaction();
		//如果写在service中每次创建 init、begin 事务就会报 Invalid transition attempted from state READY to state INITIALIZING 这样的错误。			
		//原因可以参考  https://www.cnblogs.com/felixzh/p/10184762.html
        return producer;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章