Из того, что я узнал, Flume инкапсулирует передаваемые данные в пакет событий, созданный заголовком и полезной нагрузкой (передаваемые данные). Из документации:
Событие Flume определяется как единица потока данных, имеющая полезные данные в байтах и необязательный набор строковых атрибутов.
Непосредственно перед цитированием вашей документации.
Указанный вами формат является форматом пакета событий, а не форматом ваших данных.
Предположим, у вас есть этот агент:
plain_to_avro_translator.sources = plain-source avro-source
plain_to_avro_translator.sinks = avro-sink local-file-sink
plain_to_avro_translator.channels = mem-channel1 mem-channel2
plain_to_avro_translator.sources.plain-source.channels = mem-channel1
plain_to_avro_translator.sources.plain-source.type = exec
plain_to_avro_translator.sources.plain-source.restart = true
plain_to_avro_translator.sources.plain-source.restartThrottle = 40000
plain_to_avro_translator.sources.plain-source.command = cat /home/user/data.log
plain_to_avro_translator.sinks.avro-sink.channel = mem-channel1
plain_to_avro_translator.sinks.avro-sink.type = thrift
plain_to_avro_translator.sinks.avro-sink.hostname = 192.168.200.43
plain_to_avro_translator.sinks.avro-sink.port = 6000
plain_to_avro_translator.channels.mem-channel1.type = memory
plain_to_avro_translator.channels.mem-channel1.capacity = 100
plain_to_avro_translator.channels.mem-channel1.transactionCapacity = 100
plain_to_avro_translator.sources.avro-source.channels = mem-channel2
plain_to_avro_translator.sources.avro-source.type = thrift
plain_to_avro_translator.sources.avro-source.bind = 0.0.0.0
plain_to_avro_translator.sources.avro-source.port = 6000
plain_to_avro_translator.channels.mem-channel2.type = memory
plain_to_avro_translator.channels.mem-channel2.capacity = 100
plain_to_avro_translator.channels.mem-channel2.transactionCapacity = 100
plain_to_avro_translator.sinks.local-file-sink.channel = mem-channel2
plain_to_avro_translator.sinks.local-file-sink.type = file_roll
plain_to_avro_translator.sinks.local-file-sink.sink.directory = /home/user/flume_output
Это будет работать без проблем и не зависит от формата data.log (вы можете написать все, что вам нужно и в любом формате). Если вы попытаетесь установить тип avro-sink на avro вместо thrift, вы получите ошибки от avro-source, потому что он ожидает события формата thrift.
Приемник и источник должны знать, как анализировать пакет событий.
Надеюсь, я получил это хорошо. Пожалуйста, поправьте меня, если я ошибаюсь.
person
Bino
schedule
20.08.2018