Создайте поток событий Kafka из строк одного массивного файла - PullRequest
0 голосов
/ 24 января 2019

В информатике ДНК файлы огромны (по 300 ГБ каждый, а в биобанках сотни тысяч файлов), и им нужно пройти через 6 или более длинных конвейеров (от нескольких часов до недель).Поскольку я не работаю в компании, которая производит машины для секвенирования, у меня нет доступа к данным во время их генерации ... и при этом я не пишу язык ассемблера.

Что я хотел бы сделать, так этопреобразовать строки текста из этого файла 300 ГБ в события потока.Затем передайте эти сообщения через 6 конвейеров, а брокеры Kafka передадут SparkStreaming между каждым конвейером.

Возможно ли это?Это неправильный вариант использования?Было бы неплохо перезапустить отдельные события, а не целые неудачные партии.

Desired Workflow:
------pipe1------
_------pipe2------
__------pipe3------
___------pipe4------


Current Workflow:
------pipe1------
_________________------pipe2------
__________________________________------pipe3------
___________________________________________________------pipe4------

1 Ответ

0 голосов
/ 24 января 2019

Кафка не предназначена для отправки файлов, только относительно небольшие события. Даже если вы отправляете файл построчно, вам нужно будет знать, как собрать файл обратно, чтобы обработать его, и, таким образом, вы эффективно делаете то же самое, что потоковая передача файлов через сырой сокет TCP.

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

Как я могу отправлять большие сообщения с Kafka (более 15 МБ)?

Если вам действительно нужно получить такие данные, хотя Kafka, рекомендуемый шаблон - поместить ваши большие файлы во внешнее хранилище (HDFS, S3 и т. Д.), Затем поместить URI в файл в событии Kafka и позволить потребители имеют дело с чтением этого источника данных.

Если файлы имеют какую-либо структуру (например, страницы), вы можете использовать Spark и пользовательский Hadoop InputFormat для их сериализации и параллельной обработки данных. Впрочем, не обязательно проходить через Кафку. Вы можете попробовать Apache NiFi, который, как я слышал, лучше обрабатывает большие файлы (может, не ГБ).

...