Дизайн: отправка повторяющихся состояний в тему Kafka - PullRequest
0 голосов
/ 28 мая 2020

Я работаю над побочным проектом, в котором я загружаю данные о транспортировке в кластер kafka. Данные поступают из API моего города publi c. Например: в городе каждая дорога работает.

Я приезжаю ремонт дороги каждые несколько часов. Но API publi c не возвращает timestamp, поэтому у меня нет возможности легко сказать, какие дорожные работы являются новыми или были недавно изменены. В большинстве случаев контент, возвращаемый API, не перемещался с прошлого раза. Я использую идентификатор дорожных работ в качестве ключа topi c и активировал сжатие журнала, поэтому наличие большого количества дубликатов меня не пугает, поскольку я уверен, что последнее состояние каждой работы будет сохранено.

Но, учитывая большое количество дубликатов и тот факт, что меня интересует только последняя версия, это нормально? Стоит ли пытаться обнаружить новые / модифицированные дорожные работы и только pu sh thoses? Есть ли способ сделать это прямо в Кафке?

1 Ответ

0 голосов
/ 29 мая 2020

Сжатие журналов Kafka очень хорошо подходит для вашего варианта использования. Альтернативы означают написание кода самостоятельно, добавляя при этом дополнительную сложность.

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

Чтобы минимизировать дублирование и, следовательно, сохранить низкий общий объем, вы можете настроить доступные topi c конфигурации . В частности, я предлагаю

  • уменьшить min.cleanable.dirty.ratio (значение по умолчанию - 0,5), чтобы проводить чистки чаще. Однако имейте в виду, что это приведет к неэффективной очистке при использовании большего количества ресурсов.

  • уменьшить max.compaction.lag.ms (по умолчанию MAX_LONG), чтобы сократить максимальное время, в течение которого сообщение остается не подходит для сжатия в журнале.

  • установите cleanup.policy=delete,compact, если ваше приложение может позволить себе потерять старые сообщения. В этом режиме будут активированы обе политики очистки, и вы сможете сохранить как минимум последнее состояние для каждого ключа в течение заданного времени хранения (или даже размера байта).

Кроме того, если вас беспокоит размер тома, примените compression.type к своему производителю. Начиная с версии Kafka 2.2.0 у вас есть zstd, что обычно помогает значительно уменьшить размер байта.

...