Кафка Коннект против Акка-стрим Кафка

Я собираюсь внедрить потоковую инфраструктуру для своей организации на основе Kafka и Spark. Тем не менее, я озадачен, решив, как лучше поступить, когда дело доходит до приема данных в Кафке.

Многие решения действительно возможны для этой задачи

  1. Сам Spark можно использовать для чтения из внешнего источника и записи в Kafka. Я не хочу использовать эту дорогу.
  2. Кафка Коннект
  3. API клиента Kafka (Производитель и потребитель)
  4. Akka-Stream Kafka (насколько я понимаю, это может быть клиент Reactive Kafka, но я не уверен)

Чтобы сделать свой выбор, конечно, я мог бы отправиться в путешествие, чтобы попробовать все самостоятельно, однако, мне интересно, кто-нибудь уже преодолел это препятствие.

Я склоняюсь к (4). Поэтому для того, кто имел некоторый опыт работы с этими структурами для решения задачи, я хотел бы поделиться со мной этим опытом.

В частности, я хотел бы знать плюсы и минусы, наблюдаемые между использованием (4) и (2). Что делает Kafka Connect лучшим выбором для приема внутрь. Это действительно намного больше работы, чтобы использовать (4). Является ли Kafka Connect реактивным? Kafka connect обрабатывает обратное давление?

1 ответ

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

Платформа Akka Streams Kafka действительно является просто изменчивым вариантом обычных API производителей / потребителей. Вы все еще должны делать все те же самые вещи, упомянутые выше.

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

Одним из больших преимуществ Kafka Connect является количество доступных разъемов для широкого спектра существующих систем. Если разъем подходит, просто установите на своих рабочих Kafka Connect, настройте соединители для связи с вашей внешней системой, а затем контролируйте и управляйте рабочими Kafka Connect. Нет написания кода вообще. Например, в дополнение к соединителям, которые копируют данные из внешней системы, другие соединители отслеживают изменения во внешней системе и фиксируют новые / измененные / удаленные данные. Иногда эти соединители могут просто отслеживать файловую систему на предмет изменений, тогда как другие являются правильными соединителями захвата данных изменений, которые контролируют системы управления базами данных для вставленных, обновленных и удаленных строк / объектов / документов. Эти соединители работают вечно, постоянно следя за любой новой или измененной информацией и передавая ее в соответствующие темы Kafka.

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

В предыдущем комментарии к вашему вопросу вы говорили о том, что Kafka и Kafka Connect не являются реактивными. Это не так, но это не ограничивает взаимодействие разъемов с внешней системой. Существуют соединители, которые устанавливают соединение с внешней системой, и внешняя система передает информацию клиенту через соединитель. Другие реализации коннектора опрашивают (или чаще длительный опрос) внешнюю систему. Это просто зависит от того, как вы разговариваете с внешней системой.

Теперь API-интерфейс Kafka Connect для исходных соединителей действительно использует модель извлечения, но в основном это происходит потому, что работник Kafka Connect опрашивает соединитель на наличие "исходных записей", записывает эти записи в Kafka и затем повторяет этот процесс. Каждая из задач соединителя выполняется в отдельном потоке, поэтому этот постоянный цикл будет выполняться так быстро, как ваш соединитель сможет производить данные, а Kafka Connect сможет записать их в Kafka. Обратите внимание, что ваш соединитель обычно блокируется, когда в это время нет исходных записей, и тогда рабочий не будет просто вращаться, когда нет данных.

С точки зрения разработчика, этот API чрезвычайно прост в реализации. Ваша задача соединителя запрашивается для исходных записей, а вы возвращаете их. Kafka Connect позаботится обо всем остальном. А фреймворк Kafka Connect написан разработчиками Kafka с использованием лучших практик и уже более производительной библиотеки производителей Kafka.

С точки зрения отказоустойчивости, кластер рабочего Kafka Connect автоматически распределяет соединители и задачи по кластеру. Если какой-либо из работников выходит из строя или не может связаться с остальной частью кластера (например, с сетевым разделом), кластер автоматически перебалансирует задачи соединителей на оставшихся работниках. А поскольку Kafka Connect автоматически управляет / сохраняет смещения соединителя (откуда в источнике приходит каждое сообщение), перезапущенные задачи будут обрабатываться там, где остановились другие, обеспечивая по крайней мере однократную доставку данных во внешнюю исходную систему.

Другие вопросы по тегам