有两个消费者 同属于消费组A  都消费topic1的数据
两个消费者都是使用assign 手动指定分区  两个消费者指定的分区是一样的
请问 这两个消费者消费的数据会重复吗?
有两个消费者 同属于消费组A  都消费topic1的数据
两个消费者都是使用assign 手动指定分区  两个消费者指定的分区是一样的
请问 这两个消费者消费的数据会重复吗?
不会 kafka保证的了一条消费只能消费一次
@青牛 謝謝 但是我写了一个例子是起了两个线程(模拟有两个消费者)结果就是线程A消费分区1的时候线程B也在消费分区1 不是说在同一个分组下一个分区只能被一个消费者消费吗 ?那为什么线程A和线程2会出现同时消费一个分区的情况?官网上的解释是使用assign就不會被group管理了 那这是不是就说明使用assign后会造成数据重复消费的问题?
public class kafkaConsumer extends Thread {
private String topic;
public kafkaConsumer() {
    super();
}
@Override
public void run() {
    List<String> topicList = Arrays.asList("topic1","topic2","topic3","topic4","topic5","topic6");
    KafkaConsumer consumer = createConsumer("aa");
    List<TopicPartition> topicPartitions = new ArrayList<>();
    for(String topic : topicList){
        List<PartitionInfo> partitionInfos = consumer.partitionsFor(topic);
        for (PartitionInfo info : partitionInfos) {
            TopicPartition topicPartition = new TopicPartition(info.topic(), info.partition());
            topicPartitions.add(topicPartition);
        }
    }
    consumer1.assign(topicPartitions);
    while (true){
        ConsumerRecords<String, String> records = consumer.poll(1100);
        for (ConsumerRecord<String, String> record : records) {
            System.out.println("---------"+Thread.currentThread().getName()+"---"+record.topic()+"---"+record.partition()+"-----"+record.value());
        }
        try {
            Thread.sleep(2000);
        }catch (Exception e){}
    }
}
private KafkaConsumer createConsumer(String groupName) {
    Properties props = new Properties();
    props.put("bootstrap.servers", "127.0.0.1:9092");
    props.put("group.id", groupName);
    props.put("enable.auto.commit", "true");
    props.put("max.poll.records", "100");//原来500 减小为100
    props.put("auto.commit.interval.ms", "1000");
    props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
    return consumer;
}
public static void main(String[] args) {
    new kafkaConsumer().start();// 使用kafka集群中创建好的主题 test
    new kafkaConsumer().start();// 使用kafka集群中创建好的主题 test
}
}
是不是我在代码中使用try {
Thread.sleep(2000);
}catch (Exception e){}
导致的?
KafkaConsumer consumer = createConsumer("aa"); 把consumer的名字改成每个线程不一样试试
@青牛 不一样是没问题的
你好,请问最后是怎么解决的?我也遇到同样问题