为什么flume源需要识别消息的格式?

7ajki6be  于 2021-06-03  发布在  Flume
关注(0)|答案(1)|浏览(348)

根据这里的Flume文件
flume源使用外部源(如web服务器)传递给它的事件。外部源以目标flume源识别的格式向flume发送事件。例如,avro flume源可用于接收来自avro客户端或流中其他flume代理(从avro接收器发送事件)的avro事件。
为什么flume源需要识别或理解消息的格式?它所做的只是将消息转发到其中一个通道。

n3h0vuf2

n3h0vuf21#

据我所知,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 type设置为avro而不是thrift,您将从avro source获得错误,因为它需要thrift格式事件。
接收器和源需要知道如何解析事件包。
希望我能做好。如果我错了,请任何人纠正我。

相关问题