Как перенести данные из корзины S3 в Kafka

#amazon-web-services #amazon-s3 #apache-kafka

#amazon-веб-сервисы #amazon-s3 #apache-kafka

Вопрос:

Есть примеры и документация по копированию данных из разделов Kafka в S3, но как вы копируете данные из S3 в Kafka?

Ответ №1:

Когда вы читаете объект S3, вы получаете поток байтов. И вы можете отправить любой массив байтов в Kafka с ByteArraySerializer .

Или вы можете проанализировать этот входной поток в какой-либо пользовательский объект, а затем отправить его с помощью любого сериализатора, который вы можете настроить.

Здесь вы можете найти один пример процесса Kafka Connect (который, я полагаю, вы сравниваете с программой Confluent S3 Connect writer) —https://jobs.zalando.com/tech/blog/backing-up-kafka-zookeeper/index.html это может быть настроено для чтения двоичных архивов или текста, разделенного строками, из S3.

Аналогично, Apache Spark, Flink, Beam, NiFi и т.д. Инструменты, связанные с simlar Hadoop, также могут считывать данные из S3 и записывать события в Kafka.


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

Комментарии:

1. Есть ли способ скопировать данные непосредственно из S3 в Kafka? Я хочу избежать загрузки данных в мое приложение, а затем загрузки данных в Kafka.

2. Насколько мне известно, нет. Любое используемое вами решение должно считывать данные из S3 в память, а затем передавать их в Kafka

3. Примечание: Kafka не предназначен для использования в качестве конвейера доставки файлов.

Ответ №2:

В зависимости от вашего сценария или желаемой частоты загрузки объектов, вы можете использовать лямбда-функцию для каждого события (например, при каждой загрузке файла) или как cron. Этот лямбда-код работает как производитель с использованием API Kafka и публикуется в теме.

Особенности:

  • Триггером для функции Lambda может быть s3:PutObject событие, исходящее непосредственно из s3 или из событий cloudwatch.
  • Вы можете запустить lambda как cron, если вам не нужны объекты мгновенно. Альтернативой в этом случае также может быть запуск cron на экземпляре EC2, у которого есть Kafka producer и разрешения на чтение объектов из s3, и он продолжает отправлять их в разделы kafka.