Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡夫卡消费程序挂起在某些分区上-单个卡夫卡消费程序_Java_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

Java 卡夫卡消费程序挂起在某些分区上-单个卡夫卡消费程序

Java 卡夫卡消费程序挂起在某些分区上-单个卡夫卡消费程序,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,在我的测试环境中,我有三个Kafka代理,我的主题是有16个分区,有16个IOT设备将消息发布到Kafka。我有一个单一的系统,其中有一个卡夫卡消费者订阅了这个主题。每台物联网设备每秒向卡夫卡发送一次信息,并将其均匀分布。我是 在这些IOT设备上使用Kafka Producer回调方法打印数据发布到的偏移量和分区。我的消费者不再随机消费来自某些分区的消息,同时也不再消费来自其他分区的处理记录。我实际验证了IOT设备日志,我可以看到数据实际上被发布到消费者停止消费的特定分区,并且我可以看到这些分区

在我的测试环境中,我有三个Kafka代理,我的主题是有16个分区,有16个IOT设备将消息发布到Kafka。我有一个单一的系统,其中有一个卡夫卡消费者订阅了这个主题。每台物联网设备每秒向卡夫卡发送一次信息,并将其均匀分布。我是
在这些IOT设备上使用Kafka Producer回调方法打印数据发布到的偏移量和分区。我的消费者不再随机消费来自某些分区的消息,同时也不再消费来自其他分区的处理记录。我实际验证了IOT设备日志,我可以看到数据实际上被发布到消费者停止消费的特定分区,并且我可以看到这些分区的偏移量增加。消费者中没有任何异常或任何类型的错误,除了我没有看到停止处理的分区的任何处理日志。下面是我截取的消费者代码片段

public class MyKafkaConumer extends Thread {

   private static final AtomicBoolean running= new AtomicBoolean(true); 
   private static final KafkaConsumer consumer;
   public static final MyKafkaConumer INSTANCE = new MyKafkaConumer();

   static {

          Properties props = new Properties();
          props.put("bootstrap.servers", "kafkaServer101:9092,kafkaServer102:9092,kafkaServer103:9092");
          props.put("group.id", "mykafa-group");
          props.put("enable.auto.commit", "true");
          props.put("auto.commit.interval.ms", "1000");      
          props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
                  StringDeserializer.class.getName());
          props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
                  IOTDeserializer.class.getName());
          consumer = new KafkaConsumer(props);
          consumer.subscribe(Arrays.asList("mytopic"));

       }

     private MyKafkaConumer() {
          super("MyKafkaConumer");
    }

   public void run() {


       try {
        while (running.get()) {
            ConsumerRecords records = consumer.poll(2000L);
            records.forEach(record -> {
                System.out.printf("Consumer Record:(%s, %s, %d, %d)\n", record.key(), record.value(),
                        record.partition(), record.offset());
            });

        } 
    } finally {
          consumer.close();
    }

   }

   public static void main(String[] args) throws InterruptedException {
       MyKafkaConumer.INSTANCE.start();
       MyKafkaConumer.INSTANCE.join();
}
}

我只有一个运行单线程的单个消费者。卡夫卡消费者停止处理某些分区的原因可能是什么,而对其他分区的处理正在进行,即使生产者正在向其卡住的分区发送消息?非常感谢您的帮助。分区在一些随机时间间隔后恢复,但由于应用程序丢失了实时数据,因此它没有用处。我正在为Kafka经纪人和客户使用Kafka版本0.11.01

它会随机停止,但过了一段时间后它会再次恢复吗@用户如果我重新启动消费程序,它会立即从最新的子系统中拾取数据。如果你不重新启动,我想知道在该分区停止消费后,你是否丢失了该分区的数据?还是经过一段时间的恢复@userI刚检查了3小时日志,还没有恢复。它只是在重新启动后才开始使用。昨天,重新启动是错误的,经过一段时间间隔后,分区将恢复