Потребитель Apache Kafka всегда отстает - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть следующий кластер Kafka: 1 zk и 2 брокера, 1zk + 1 брокер на одной машине и 2 брокера на другой.У меня есть тема с repl-factor = 2 partitions = 2 Я отправляю около 4k сообщений в эту тему, используя моего производителя.Кроме того, у меня есть потребитель, который просто делает ничего, кроме потребления записей:

try {
     consumer.subscribe(topics);
      while (true) {
         ConsumerRecords<String, String> records = consumer.poll(0);
         for (ConsumerRecord<String, String> record : records) {
         }
      }
    } catch (WakeupException e) {
    } finally {
       consumer.close();
    }

Для потребителя установлено AUTO_COMMIT_INTERVAL_MS_CONFIG на 100 мс;

Поэтому вопрос заключается в том, почему я всегда наблюдаю отставание между потребителем и производителем?Я использую следующую команду для получения лага:

./bin/kafka-consumer-groups.sh --describe --group events-group-test --bootstrap-server kafka01:9092

У меня есть сценарий cmd, который просто печатает лаги для меня в цикле:

-bash-4.2$  while true; do  date +%H:%M:%S;./bin/kafka-consumer-groups.sh --describe --group events-group-test --bootstrap-server kafka01:9092 | awk '$5 ~ /[0-9.]+/ { print "part:" $2" lag: "$5}'; sleep 20; done prints 
11:31:04
Note: This will not show information about old Zookeeper-based consumers.

part:0 lag: 1207
part:1 lag: 1100
11:31:29
Note: This will not show information about old Zookeeper-based consumers.

part:0 lag: 5476
part:1 lag: 4692
11:31:53
Note: This will not show information about old Zookeeper-based consumers.

part:0 lag: 3389
part:1 lag: 1646
11:32:16
Note: This will not show information about old Zookeeper-based consumers.

part:0 lag: 1365
part:1 lag: 593
11:32:39
Note: This will not show information about old Zookeeper-based consumers.

part:0 lag: 4575
part:1 lag: 3488
11:33:03
Note: This will not show information about old Zookeeper-based consumers.

Как видите, он всегда показывает лаги~ 3-4 тыс. Сообщений, но мой потребитель буквально ничего не делает с записями, поэтому он должен потреблять мгновенно, и я ожидаю 0 лагов.Кроме того, я попытался уменьшить загрузку производителя до 30 сообщений в секунду, но потребитель все еще показывает LAG (~ 30-50).Можно ли достичь 0 ЛАГ?

...