Ваш вопрос носит весьма общий характер. Было бы хорошо понять вашу архитектуру, ее цель и сделанные вами предположения.
Kafka, как указано в его документации, представляет собой масштабируемую масштабируемую систему обмена сообщениями для публикации-подписки. Мое предположение заключалось в том, что вы используете его в качестве брокера данных в своей архитектуре.
Elasticsearch, с другой стороны, является поисковой системой, поэтому я предполагаю, что вы используете его как уровень доступа к данным/поиска/агрегации.
Эти две отдельные системы требуют соединителей для создания надлежащего конвейера данных. Именно здесь входит Logstash. Это позволяет вам создавать потоковое потоковое соединение между вашим Kafka и Elasticsearch. Он также позволяет вам мутировать данные «на лету», в зависимости от ваших потребностей.
В идеале, Kafka использует необработанные данные. Elasticsearch хранит документы, которые полезны для ваших потребителей данных (веб-или мобильное приложение, другие системы и т. Д.), Поэтому может быть совершенно иным, чем формат необработанных данных. Если вам нужно изменить данные между его необработанной формой и ES-документом, это может быть удобно для Logstash (см. Этап filters).
Другим подходом может быть использование соединителей Kafka, создание специальных инструментов, например. основанный на потоках или потребителях Kafka, но это действительно зависит от концепций вашей архитектуры - цели, стека, требований к данным и т. д.