【Kafka】Kafka指定分区消费

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()));
            }
        }
    }
}
发布了109 篇原创文章 · 获赞 126 · 访问量 6398

猜你喜欢

转载自blog.csdn.net/beautiful_huang/article/details/104499322