我正在尝试使用Flume 1.6来读取我的源文件(管道分隔的文本文件)并将它们提供给kafka。
所有的管道似乎工作正常,所有记录都成功进入卡夫卡。但是,Flume似乎在每条数据行的开头添加了NUL和STX控制字符。
这对我来说有点问题,因为最终我将所有数据从Kafka流式传输到Amazon S3并最终流入Amazon Redshift。由于这些控制字符,我加载到Redshift(COPY命令)的数据失败。
我花了相当多的时间在互联网上研究这个问题但到目前为止没有运气。我可以以某种方式指示Flume不要在我的源数据中添加这些字符吗?
我的Flume配置如下。我尝试了“exec”和“spoolDir”来源,但没有改变任何内容。
kafka-agent.channels=ch1
kafka-agent.channels.ch1.type=org.apache.flume.channel.kafka.KafkaChannel
kafka-agent.channels.ch1.brokerList=localhost:9092
kafka-agent.channels.ch1.topic=call-center-dimension
kafka-agent.channels.ch1.zookeeperConnect=localhost:2181
kafka-agent.channels.ch1.capacity=10000
kafka-agent.channels.ch1.transactionCapacity=10000
kafka-agent.channels.ch1.parseAsFlumeEvent = true
kafka-agent.channels.ch1.kafka.serializer.class=kafka.serializer.DefaultEncoder
kafka-agent.sources=tail
#kafka-agent.sources.tail.type=spooldir
#kafka-agent.sources.tail.channels=ch1
#kafka-agent.sources.tail.spoolDir=/home/ec2-user/flumespool
#kafka-agent.sources.tail.fileHeader=false
kafka-agent.sources.tail.type=exec
kafka-agent.sources.tail.channels=ch1
kafka-agent.sources.tail.shell=/bin/bash -c
kafka-agent.sources.tail.command=cat /tmp/call_center_dimension_1.out
kafka-agent.sinks=sink1
kafka-agent.sinks.sink1.type=org.apache.flume.sink.kafka.KafkaSink
kafka-agent.sinks.sink1.brokerList=localhost:9092
kafka-agent.sinks.sink1.topic=kafka
kafka-agent.sinks.sink1.channel=ch1
kafka-agent.sinks.sink1.batchSize=5
kafka-agent.sinks.sink1.kafka.serializer.class=kafka.serializer.StringEncoder
感谢任何帮助。
由于 Pravesh
答案 0 :(得分:0)
只是关闭循环。
花了很多时间在这上面。还使用regex_replace拦截器来移除控制字符,但没有运气。
最终最终评估并使用Apache Nifi。精彩的工具,易于设置和快速实施。我能够从文件中读取数据并使用Nifi推送到Kafka主题,它可以保持数据的清洁和完整。
谢谢, Pravesh
答案 1 :(得分:0)
尝试使用Hdfs文件的DataStream fileType:
kafka-agent.sinks.sink1.hdfs.fileType = DataStream