2017-07-10 8 views
0

私は最近、質問Apache Flume - send only new file contentsFlumeでtaildirソースを使用して、.txtファイルの最新の行だけを追加するにはどうすればよいですか?

私はより多くを学び、水路の将来のユーザーbenefittoより多くを提供するために、質問を言い換えていますが尋ねました。

セットアップ:2つのサーバー.1つは、.txtファイルを使用して、行を定期的に追加します。

目的:flume TAILDIR sourceを使用して、最後に書き込まれた行を別のサーバー上のファイルに追加します。

問題:ソースファイルに新しい行のデータが追加されるたびに、現在の構成では、サーバー1のファイル内のすべてがサーバー2のファイルに追加されます。その結果、ファイル2に重複した行が作成され、サーバからサーバ1 1.

構成:

#configure the agent 
    agent.sources=r1 
    agent.channels=k1 
    agent.sinks=c1 

    #using memort channel to hold upto 1000 events 
    agent.channels.k1.type=memory 
    agent.channels.k1.capacity=1000 
    agent.channels.k1.transactionCapacity=100 

    #connect source, channel,sink 
    agent.sources.r1.channels=k1 
    agent.sinks.c1.channel=k1 

    #define source 
    agent.sources.r1.type=TAILDIR 
    agent.sources.r1.channels=k1 
    agent.sources.r1.filegroups=f1 

    agent.sources.r1.filegroups.f1=/home/tail_test_dir/test.txt 
    agent.sources.r1.maxBackoffSleep=1000 

    #connect to another box using avro and send the data 
    agent.sinks.c1.type=avro 
    agent.sinks.c1.hostname=10.10.10.4 
    agent.sinks.c1.port=4545 

サーバー2の構成:

#configure the agent 
    agent.sources=r1 
    agent.channels=k1 
    agent.sinks=c1 

    #using memory channel to hold up to 1000 events 
    agent.channels.k1.type=memory 
    agent.channels.k1.capacity=1000 
    agent.channels.k1.transactionCapacity=100 

    #connect source, channel, sink 
    agent.sources.r1.channels=k1 
    agent.sinks.c1.channel=k1 

    #here source is listening at the specified port using AVRO for data 
    agent.sources.r1.type=avro 
    agent.sources.r1.bind=0.0.0.0 
    agent.sources.r1.port=4545 

    #use file_roll and write file at specified directory 
    agent.sinks.c1.type=file_roll 
    agent.sinks.c1.sink.directory=/home/Flume_dump 

答えて

0

あなたは位置JSON FIを設定する必要がありますル。ソースは位置を確認し、シンクに追加された新しい行だけを書き出します。 例)agent.sources.s1.positionFile = /var/log/flume/tail_position.json

関連する問題