Только что обнаружил, что низкочастотный пилообразный паттерн не настоящий.И объяснение довольно интересное.;)
Когда я проверяю отставание потребителя с помощью командной строки (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](https://i.stack.imgur.com/KkSK1.png)