Как возникает пилообразный паттерн потребительского лага Kafka? - PullRequest
0 голосов
/ 25 сентября 2018

Некоторые из моих потребителей Kafka (но не все) демонстрируют интересную картину, касающуюся их задержки.

На следующем рисунке показаны два хороших примера:

enter image description here

enter image description here

темно-синий:

  • около 200 сообщений в секунду в теме
  • 32 раздела
  • 1 потребитель в группе (клиент Python, работающий в Kubernetes)

голубой (та же тема, что и синий):

  • , так же и о200 сообщений в секунду в теме
  • , а также 32 раздела
  • 1 потребитель в группе (также клиент Python, работающий в Kubernetes)

коричневый:

  • около 1500 сообщений в секунду в теме
  • 40 разделов
  • 2 потребителей в группе (клиент Java / Spring, работающий в Kubernetes)

Оба пилообразных клиента могут обрабатывать гораздо большую пропускную способность, чем та (проверено путем приостановки, возобновления и разрешения их догнать), поэтому они не работают на своих границах.

Иногда происходит перебалансировка (согласно журналам), но гораздо реже, чем скачки на диаграмме, и несколько событий также не коррелируют во времени со скачками.

Сообщения такжене приходи партиями.Вот дополнительная информация для одной из затронутых тем:

enter image description here

enter image description here

enter image description here

Откуда может появиться этот шаблон?

1 Ответ

0 голосов
/ 27 сентября 2018

Только что обнаружил, что низкочастотный пилообразный паттерн не настоящий.И объяснение довольно интересное.;)

Когда я проверяю отставание потребителя с помощью командной строки (kafka-consumer-groups --bootstrap-server=[...] --group [...] --describe), я вижу, что общее отставание потребителя (сумма лагов на раздел) изменяется очень быстро.В какой-то момент он составляет около 6000, через 2 секунды - около 1000, а через 2 секунды он может составить 9000.

Однако приведенный график основан на выборках, взятых с более низкой частотой, что нарушает Теорема отсчетов Найквиста – Шеннона .Таким образом, усреднение не работает, и мы видим Муаровый паттерн .

Вывод: пилообразный паттерн - всего лишь иллюзия.


Для полноты здесьсимуляция, изображающая эффект:

#!/usr/bin/env python3
"""Simulate moire effect of Kafka-consumer-lag graph.
"""

import random

import matplotlib.pyplot as plt


def x_noise_sampling() -> int:
    return 31 + random.randint(-6, 6)


def main() -> None:
    max_x = 7000
    sample_rate = 97
    xs = list(range(max_x))
    ys = [x % 100 for x in xs]
    xs2 = [x + x_noise_sampling() for x in range(0, max_x - 100, sample_rate)]
    ys2 = [ys[x2] for x2 in xs2]

    plt.figure(figsize=(16, 9))
    plt.xlabel('Time')
    plt.xticks([])
    plt.yticks([])
    plt.ylabel('Consumer lag')
    signal, = plt.plot(xs, ys, '-')
    samples, = plt.plot(xs2, ys2, 'bo')
    interpolated, = plt.plot(xs2, ys2, '-')
    plt.legend([signal, samples, interpolated], ['Signal', 'Samples', 'Interpolated samples'])
    plt.savefig('sawtooth_moire.png', dpi=100)
    plt.show()


if __name__ == '__main__':
    main()

enter image description here

...