问题:
当kafkasource和kafkasink一起使用时, 传输到kafkasink的数据,被传到了kafkasource。
即陷入死循环,从 kafkasource 读取的数据被flume 重新传到kafkasource。
原因
当flume从kafka里读取的数据时,消息上会有个event headers结构。在events headers中会自动带上,topic:‘topic名称’。
如:
而kafka sink的 中 allowTopicOveride参数默认为true,即会使用event headers中的topic覆盖我们在kafka sink 配置的topic。
所以flume在输出的时候,会优先使用从event header中读取到的topic,其次才是读取 Sink端配置的topic。
导致flume在输出的时候kafka sink的topic被覆盖,数据被输出到kafka source的topic中了。
解决
方式1
如果kafka sink的topic是固定的,已知的。可以将allowTopicOverride参数设置为false,禁止header中的topic覆盖sink配置的topic值
sink 配置设置:
a1.sinks.kafkaSink.allowTopicOverride = false
配置文件完整代码
<