kafka 生产者的幂等简单实现

关于幂等性可以看我上一篇转载的文章

普通的生产者

public static void upload() {
    	Producer producer = new KafkaProducer<>(props);
    	for (int i = 0; i < 100; i++)
    	     producer.send(new ProducerRecord("test", Integer.toString(i), "lll"+Integer.toString(i)));
    	producer.flush();
    	producer.close();
    	System.out.println("上传成功");
    	//上传成功
    }

幂等

public static void upload_() {//幂等性
    	 Properties props = new Properties();
    	 props.put("bootstrap.servers", "localhost:9092");
    	 props.put("transactional.id", "my-transactional-id");
    	 Producer producer = new KafkaProducer<>(props, new StringSerializer(), new StringSerializer());

    	 producer.initTransactions();

    	 try {
    	     producer.beginTransaction();
    	     for (int i = 0; i < 100; i++)
    	         producer.send(new ProducerRecord<>("test", Integer.toString(i), Integer.toString(i)));
    	     producer.commitTransaction();
    	 } catch (ProducerFencedException | OutOfOrderSequenceException | AuthorizationException e) {
    	     // We can't recover from these exceptions, so our only option is to close the producer and exit.
    	     producer.close();
    	 } catch (KafkaException e) {
    	     // For all other exceptions, just abort the transaction and try again.
    	     producer.abortTransaction();
    	 }
    	 producer.flush();
    	 producer.close();
    	System.out.println("上传成功");
    	//上传成功
    }

你可能感兴趣的:(Hadoop,Kafka)