Java 卡夫卡消费程序挂起在某些分区上-单个卡夫卡消费程序
在我的测试环境中,我有三个Kafka代理,我的主题是有16个分区,有16个IOT设备将消息发布到Kafka。我有一个单一的系统,其中有一个卡夫卡消费者订阅了这个主题。每台物联网设备每秒向卡夫卡发送一次信息,并将其均匀分布。我是Java 卡夫卡消费程序挂起在某些分区上-单个卡夫卡消费程序,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,在我的测试环境中,我有三个Kafka代理,我的主题是有16个分区,有16个IOT设备将消息发布到Kafka。我有一个单一的系统,其中有一个卡夫卡消费者订阅了这个主题。每台物联网设备每秒向卡夫卡发送一次信息,并将其均匀分布。我是 在这些IOT设备上使用Kafka Producer回调方法打印数据发布到的偏移量和分区。我的消费者不再随机消费来自某些分区的消息,同时也不再消费来自其他分区的处理记录。我实际验证了IOT设备日志,我可以看到数据实际上被发布到消费者停止消费的特定分区,并且我可以看到这些分区
在这些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小时日志,还没有恢复。它只是在重新启动后才开始使用。昨天,重新启动是错误的,经过一段时间间隔后,分区将恢复