kafka例子
<dependencies> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.13</artifactId> <version>2.7.0</version> </dependency> </dependencies>
生产者
package com.test.producer; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.common.serialization.StringSerializer; import java.util.Properties; public class MyProducer { public static void main(String[] args) { Properties properties = new Properties(); properties.put("bootstrap.servers", "localhost:9092"); // ack properties.put("acks", "all"); // 重试次数 properties.put("retries", 1); // 批次大小 properties.put("batch.size", 16384); // 等待时间 properties.put("linger.ms", 1); // 缓冲区大小 properties.put("buffer.memory", 33554432); // 设置数据key和value的序列化处理类 properties.put("key.serializer", StringSerializer.class); properties.put("value.serializer", StringSerializer.class); KafkaProducer<String, String> produce = new KafkaProducer<>(properties); for (int i=0; i < 2; i++) { produce.send(new ProducerRecord<>("test","key-"+i,"value--" + i)); } produce.close(); } }
消费者
package com.test.consumer; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.common.serialization.StringDeserializer; import java.time.Duration; import java.util.Arrays; import java.util.Properties; public class MyConsumer { public static void main(String[] args) { Properties properties = new Properties(); properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092"); // 自动提交 properties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,true); // 提交延时 properties.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,"1000"); // 反序列化 properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); // 消费者组 properties.put(ConsumerConfig.GROUP_ID_CONFIG,"bigdata"); // 重置消费者的offset(换组、offset过期) properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"earliest"); KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(properties); // 订阅主题 consumer.subscribe(Arrays.asList("test")); // 获取数据 while (true){ ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100)); for(ConsumerRecord<String,String> record: records){ System.out.println("key:" + record.key() + "" + ",value:" +record.value()); } } } }
带有callback的生产者
package com.test.producer; import org.apache.kafka.clients.producer.*; import org.apache.kafka.common.serialization.StringSerializer; import java.util.Properties; public class CallbackProducer { public static void main(String[] args) { Properties properties = new Properties(); properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092"); properties.put("key.serializer", StringSerializer.class); properties.put("value.serializer", StringSerializer.class); KafkaProducer<String, String> producer = new KafkaProducer<String, String>(properties); for (int i=0; i < 10; i++) { producer.send(new ProducerRecord<>("test","1","tt--" + i), (metadata, exception) -> { if (exception == null){ System.out.println(metadata.partition() + "--" + metadata.offset()) ; } else { exception.printStackTrace(); } }); } producer.close(); } }