Есть ли Spark-подобный аккумулятор для Kafka Streams? - PullRequest
0 голосов
/ 22 сентября 2018

Spark имеет полезный API для накопления данных безопасным для потоков способом https://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.spark.util.AccumulatorV2 и поставляется с некоторыми готовыми полезными аккумуляторами, например, для Longs https://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.spark.util.LongAccumulator

Я обычно использую аккумуляторы дляподключение к отладке, профилированию, мониторингу и диагностике в заданиях Spark.Обычно я запускаю Future перед запуском задания Spark, чтобы периодически печатать статистику (например, TPS, гистограммы, счетчики, тайминги и т. Д.)

Пока что я не могу найти ничего похожего для потоков Kafka.Есть ли что-нибудь?Я полагаю, что это возможно, по крайней мере, для каждого экземпляра приложения Kafka, но для того, чтобы эта работа работала в нескольких экземплярах, потребовалось бы создать промежуточную тему.

1 Ответ

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

Kafka Streams избегает параллелизма по своему замыслу - если накопленное не должно быть отказоустойчивым, вы можете сделать это в памяти и удалить его с помощью пунктуации времени на настенных часах.

Если это необходимочтобы быть отказоустойчивым, вы можете использовать хранилище состояний и сканировать весь магазин в пунктуации, чтобы очистить его.

Это даст вам накопление на уровне задач.Не уверен, как аккумулятор Spark работает в деталях, но если он дает вам «глобальное» представление, я предполагаю, что ему нужны данные для передачи по сети, и только один экземпляр имеет доступ к данным (или, возможно, широковещательная рассылка, а неконечно, как последовательность будет гарантирована для случая трансляции).Аналогично, вы можете отправить данные в тему (с 1 разделом), чтобы собрать все данные глобально в одном месте.

...