import org.apache.kafka.clients.consumer.Consumer;
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.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.TopicPartition;
import java.time.Duration;
import java.util.Arrays;
import java.util.Properties;
import java.util.Random;
/**
* 测试类
*/
public class Server {
public static void main(String[] args) throws InterruptedException {
// send();//生产者
pull();//消费者
}
/**
* 生产者
*/
static void send() {
Properties prop = new Properties();
prop.put("bootstrap.servers", "mini1:9092,mini2:9092,mini3:9092");//指定节点地址
prop.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
prop.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
prop.put("partitioner.class", "com.kafka.server.KafkaCustomPartitioner");
prop.put("acks", "-1");
Producer<Object, Object> producer = new KafkaProducer<>(prop);//生产者
for (int i = 0; i < 10000; i++) {
producer.send(new ProducerRecord<>("test6", i + "", "" + Math.random()));
producer.flush();
}
producer.close();
}
/**
* 消费者
*/
static void pull() throws InterruptedException {
Properties prop = new Properties();
prop.put("bootstrap.servers", "mini1:9092,mini2:9092,mini3:9092");//指定节点地址
prop.put("group.id", "001");
prop.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
prop.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
prop.put("consumer-id", "test");
Consumer<String, String> consumer = new KafkaConsumer<>(prop);//消费者
TopicPartition p = new TopicPartition("test6", 2);//只消费分区号为2的分区
consumer.assign(Arrays.asList(p));
// consumer.subscribe(Arrays.asList("test6"));//消费topic 消费全部分区
while (true) {
ConsumerRecords<String, String> poll = consumer.poll(Duration.ofSeconds(10));//消费一定时间的数据
Thread.sleep(3000);
System.out.println("循环");
for (ConsumerRecord<String, String> record : poll) {
System.out.println(String.format("key:%s , value:%s , offset:%s", record.key(), record.value(), record.offset()));
}
}
}
}
【Kafka】Kafka指定分区消费
猜你喜欢
转载自blog.csdn.net/beautiful_huang/article/details/104499322
今日推荐
周排行