Правильный способ хранения смещений в Kafka при использовании Spark и Elastic Search

Я провел много исследований по этому поводу, но до сих пор не могу найти что-то подходящее. Куда бы я ни пошел, я вижу, что самый простой способ - это вызвать saveToEs(), а затем после этого зафиксировать смещения. У меня вопрос: а что, если saveToEs() по какой-то причине выйдет из строя?

Как правильно хранить смещения в Kafka, когда мы используем задание потоковой передачи Spark и храним наши документы в ES. Я пробовал использовать BulkProcessorListener и сохранял смещения вручную (отслеживая отсортированные смещения, запросы и тому подобное), но это вышло из-под контроля, и подход казался сложным для такой общей задачи.

Может ли кто-нибудь направить меня?

Всем, кто интересуется моим подходом, вот вопрос, который его объясняет Зафиксировать смещения для Kafka на Spark Executors


person alina    schedule 05.11.2019    source источник
comment
Лучше всего записать свои данные обратно в Kafka из Spark, а затем вы можете использовать Kafka Connect для потоковой передачи их в Elasticsearch. Для этого предназначен Kafka Connect. Если это будет интересно, я могу написать ответ, объясняющий, как это сделать.   -  person Robin Moffatt    schedule 05.11.2019
comment
@RobinMoffatt, разве я не могу использовать Spark в середине? Я фильтрую и обогащаю свои события (это то, что делает Spark), а затем сохраняю их в ES   -  person alina    schedule 05.11.2019
comment
можно, но это не всегда лучший подход. выполните фильтрацию и обогащение с помощью Spark, а затем используйте Kafka Connect для надежной потоковой передачи обработанных данных в Elasticsearch. Каждый инструмент делает то, в чем он хорош.   -  person Robin Moffatt    schedule 05.11.2019
comment
@RobinMoffatt, вы правы, но сейчас у нас нет возможности изменить инструмент. Тем не менее, я все же хотел бы знать, как мы можем это сделать, возможно, в будущем мы сможем использовать это   -  person alina    schedule 05.11.2019
comment
Трудно обрабатывать сценарий сбоя и всегда быть транзакцией блока вызова ... что-то, что вам нужно обработать в своем коде ... лучший подход, о котором упоминал @RobinMoffatt ... использовать соединитель ES ... он очень надежен   -  person sun007    schedule 05.11.2019
comment
@ sun_007 Разъем ES? Вы имеете в виду использовать Kafka Connector, который пишет напрямую в ES? и пусть Кафка и ES заботятся об обработке сбоев и совершении смещений? Предоставляет ли этот коннектор эту функциональность из коробки или для этого тоже требуется какой-то хакерский способ?   -  person alina    schedule 05.11.2019
comment
Да Connector - это готовое решение, это часть сливающегося, но с открытым исходным кодом ... попробуйте задать вопрос, если возникнут какие-либо проблемы   -  person sun007    schedule 05.11.2019
comment
@ sun_007 да! Я займусь этим. Я действительно надеялся получить решение Spark, потому что на данный момент немного сложно перестроить архитектуру, но спасибо, что указали мне в этом направлении.   -  person alina    schedule 05.11.2019