Kafka результат последнего опроса: 0 сообщений - PullRequest
0 голосов
/ 09 января 2019

У меня есть Kafka Topic (1.0.0) с одним разделом. Потребитель упакован в EAR, и при развертывании в Wildfly 10 опрос последнего сообщения всегда возвращает 0 сообщений. Хотя тема не пустая.

final TopicPartition tp = new TopicPartition(topic, 0);

final Long beginningOffset = consumer.beginningOffsets(Collections.singleton(tp)).get(tp);
final Long endOffset = consumer.endOffsets(Collections.singleton(tp)).get(tp);

consumer.assign(Collections.singleton(tp));
consumer.seek(tp, endOffset - 1); 

Когда я делаю опрос, я получаю 0 записей. Хотя в журнале говорится:

Consumer is now at position 377408 while Topic begin is 0 and end is 377409

Когда я изменяю на -2, как:

consumer.seek(tp, endOffset - 2);

Я получаю одно сообщение:

 Consumer is now at position 377407 while Topic begin is 0 and end is 377409

Но, конечно, это не правильная запись, ГДЕ сообщение 377408?

Перепробовал много способов добиться конца и т. Д., Но это никогда не срабатывало.

Вот мой конфиг Consumer:

Properties properties = new Properties();
properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, Configuration.KAFKA_SERVERS.getAsString());
properties.put(ConsumerConfig.GROUP_ID_CONFIG, GROUP_ID);
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, LongDeserializer.class);
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
properties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");
properties.put(ConsumerConfig.ISOLATION_LEVEL_CONFIG, "read_committed");

Примечание: я пытался с read_uncommitted И read_committed, оба дают одинаковый результат.

1 Ответ

0 голосов
/ 09 января 2019

Как упоминалось в Javadoc , это потому, что endOffsets() возвращает:

смещение последнего успешно реплицированного сообщения плюс одно

Это фактически смещение, которое получит следующее сообщение.

Вот почему поиск endOffset - 1 ничего не возвращает, тогда как поиск endOffset - 2 возвращает только последнее сообщение.

Я согласен, что это не самое интуитивное поведение, но именно так оно и работает в настоящее время!

...