Это 9-й день моего участия в августовском испытании обновлений.Подробности о мероприятии:Испытание августовского обновления
текст
-
Ядром Flume является сбор данных из источника данных и отправка их в пункт назначения. Чтобы обеспечить успешную доставку, данные будут кэшироваться перед отправкой в место назначения, а кэшированные данные будут удалены после того, как данные действительно достигнут места назначения.
-
Основная роль в распределенной системе Flume —
agent
, система сбора лотка формируется из связующих агентов один за другим.
Агент может получать данные от клиента или предыдущего агента после фильтрации (необязательно), маршрутизации и других операций, а затем передавать их следующему или нескольким агентам (полностью распределенным), пока они не достигнут указанной целевой системы.
Пользователи могут объединять любое количество агентов для формирования конвейера данных в соответствии со своими потребностями.
Flume относится к данным, передаваемым в конвейере данных, какEvent
, каждое событие состоит из заголовка и массива байтов (содержимое данных).
Среди них заголовок состоит из ряда пар ключ/значение, которые можно использовать для маршрутизации данных, а массив байтов инкапсулирует фактическое содержимое передаваемых данных.
Обычно сериализуется с использованием таких объектов, как Avro, Thrift, Protobuf и т. д.
События в Flume могут генерироваться специальными клиентскими программами, которые инкапсулируют данные для отправки в объекты Event и вызывают SDK, предоставленный Flume, для отправки их Агенту.
Далее мы сосредоточимся на внутренних компонентах Агента, как показано на рисунке.
Агент в основном состоит из трех компонентов, а именно источника, канала и приемника, функции и функции которых заключаются в следующем.
1 . Source
Компонент сбора данных используется для взаимодействия с источником данных для получения данных.
Компонент, который получает событие в потоке данных Flume, обычно получает данные от клиентской программы или предыдущего агента и записывает их в один или несколько каналов.
Для удобства пользователей Flume предоставляет множество реализаций Source, в том числе:
Avro Source
Встроенный AvroServer, который может получать данные, отправленные клиентом Avro, и записывать их в канал.
Thrift Source
Встроенный ThriftServer, который может получать данные, отправленные клиентом Thrift, и записывать в канал.
Exec Source
Выполнить указанную оболочку и получить данные из стандартного вывода команды, записать в канал как команду «tail -F filename»,
ExecSource может реализовать сбор данных в режиме реального времени, но, учитывая, что когда агент Flume не запускается или выполнение команды завершается сбоем, данные журнала не могут быть собраны, а целостность данных журнала не может быть гарантирована, поэтому он редко используется в реальная производственная среда.
Spooling Directory Source
Источник может отслеживать изменения файлов в указанном пуле каталогов.Как только новый файл будет найден, он будет записан в Канал.При использовании Источника необходимо обратить внимание на два момента:
Файлы, скопированные в каталог мониторинга, не могут быть изменены, каталог не может содержать подкаталоги.
При использовании этого источника в качестве каталога мониторинга обычно назначается каталог.Когда данные необходимо передать, файлы копируются в этот каталог для обеспечения передачи в режиме, близком к реальному времени.
Из-за хорошей надежности и стабильности этого источника он был принят многими компаниями.
Kafka Source
Встроенный потребитель Kafka, который может считывать данные темы из Kafka Broker и записывать в канал.
Syslog Source
Он делится на два типа: источник Syslog TCP и источник Syslog UDP, которые могут соответственно получать данные, отправленные по протоколам TCP и UDP, и записывать в канал.
HTTP Source
Он может получать данные, отправленные по протоколу HTTP, и записывать их в канал. Конечно, пользователи также могут настраивать источник в соответствии со своими потребностями.
Как выбрать источник Flume?
В реальной производственной среде есть два источника данных, один из которых представляет собой файл, который может быть собран с помощью ExecSource или Spooling Directory Source, но, учитывая, что первый не может гарантировать целостность данных, а второй имеет низкую производительность в режиме реального времени, обычно настраиваемый сам по себе Он не только обеспечивает целостность, но и имеет высокую производительность в реальном времени.
taildirsource
Это очень хорошее решение, которое может отслеживать изменения файлов в каталоге в режиме реального времени, считывать новые данные в режиме реального времени и записывать точки останова, чтобы гарантировать, что данные не будут потеряны или повторно переданы после перезапуска Агента;
Другой - сетевые данные.В этом случае вы можете использовать источник Avro / Thrift и написать свою собственную клиентскую программу для передачи данных в источник.
2. Channel
Компонент транспортного канала, данные кэша, используемые для передачи данных от источника к приемнику.
Канал — это буфер, в котором временно хранится событие, записанное источником, до тех пор, пока оно не будет отправлено приемником.
В настоящее время Fume в основном предоставляет следующие реализации канала.
Memory Channel
Кэшировать события в очереди в памяти.
Канал имеет очень высокую производительность (относится к производительности записи источника и чтения приемника), но после отключения питания данные в памяти будут потеряны.Кроме того, когда памяти недостаточно, это может привести к тому, что агент крушение.
File Channel
Кэшировать события в файле на диске.
Этот канал компенсирует отсутствие канала памяти, но производительность несколько снизится.
JDBC Channel
Поддержка драйвера JDBC, который может записывать события в базу данных.
Этот канал подходит для сценариев с очень высокими требованиями к восстановлению после отказа.
Kafka Channel
Кэширование событий в Kafka.
Kafka обеспечивает высокую отказоустойчивость и масштабируемость, позволяя надежно кэшировать больше данных, что дает возможность другим приемникам повторно считывать данные в канале (например, если статистические результаты оказываются неверными, повторно собирать данные 1 день назад для обработки).
3. Sink
Компонент-приемник, данные отправляются в конечную систему хранения или агенту следующего уровня.
Приемник отвечает за чтение данных из Канала и отправку их следующему Агенту (Источнику).
Flume в основном предоставляет следующие реализации Sink:
HDFS Sink
Это наиболее часто используемый приемник, который отвечает за запись данных в канале в HDFS.Пользователь может решить, когда поочередно формировать новый файл в зависимости от времени или количества данных.
HBase Sink
Данные в канале могут быть записаны в HBase, который поддерживает как синхронные, так и асинхронные методы записи.
Avro / Thrift Sink
Встроенный клиент Avro / Thrift, который может отправлять данные о событиях на указанный сервер Avro / Thrift через Avro / Thrift RPC.
MorphlineSolr Sink / ElasticSearch Sink
Запишите данные события в канале в поисковую систему Solr/ElasticSearch. В некоторых сценариях пользователям необходимо одновременно выполнять автономный анализ и онлайн-поиск данных. Они могут использовать приемник HDFS и приемник для записи данных в HDFS и поисковая система одновременно.
Kafka Sink
Запишите данные в Канал в Кафку.
FLULE использует транзакционный подход для обеспечения надежности доставки событий.
Приемник может удалить Событие из Канала только после того, как Событие будет сохранено в Канале или после того, как оно будет успешно передано следующему Агенту.
Таким образом, можно гарантировать надежность события в потоке данных, независимо от того, происходит ли оно в одном агенте или между несколькими агентами.
Структурная схема системы сбора данных
простая структура
- Один агент собирает данные
сложная структура
- 2 агента в сериале
- Несколько агентов в серии
- несколько каналов