Flume + ElasticSearch Sink TTL

时间:2015-03-15 17:00:53

标签: java elasticsearch flume

我对apache flume的弹性搜索接收器中的TTL有疑问

我正致力于弹性搜索+水槽整合。 我正在使用elasticsearch版本1.4.1和flume版本1.5.2 两者都在我的机器上本地运行

在Flume中我的ElasticSearch Sink配置如下:

agent.sinks.elasticSearchSink.type = org.apache.flume.sink.elasticsearch.ElasticSearchSink
agent.sinks.elasticSearchSink.channel = fileChannel
agent.sinks.elasticSearchSink.hostNames=localhost:9300
agent.sinks.elasticSearchSink.indexName=platform
agent.sinks.elasticSearchSink.indexType=platformtype
agent.sinks.elasticSearchSink.ttl=1m
agent.sinks.elasticSearchSink.batchSize=1000
agent.sinks.elasticSearchSink.serializer=org.apache.flume.sink.elasticsearch.ElasticSearchLogStashEventSerializer

注意,为了测试,有1米(1分钟)的ttl。

我看到事件被添加到ES中,但一分钟后就不会被删除。 “映射”查询也没有显示存在TTL。 我知道默认情况下TTL被禁用,所以我可以像这样启用它:

>> PUT: http://localhost:9200/_all/platformtype/_mapping
with body:
{"platformtype" : {"_ttl" : {"enabled" : true, "default" : "2m"}}}

注意,现在它的2分钟TTL(只是与接收器定义不同)

所以,现在如果我添加其他事件,他们会在1分钟后被删除......

那么有人可以说明这究竟应该如何运作?这是一个错误还是我必须手动启用TTL?

由于

1 个答案:

答案 0 :(得分:1)

嗯,事实证明它的工作原理如下: 必须通过elasticsearch中的映射API启用TTL。如果没有完成,从Flume发送的TTL就会被忽略。

现在,在弹性搜索级别启用的TTL具有以下定义:

"索引'平台类型'将使用默认值为2分钟的TTL。 因此,如果我在水槽级别禁用TTL,则消息将在2分钟内被删除(在水槽发送的事件中未指定TTL,因此默认值起作用)。

或者,如果水槽提供了明确的TTL值,它将优先于默认的TTL定义,因此在这种情况下,相应的记录将在1分钟内被删除,如我所提到的。

希望这会对某人有所帮助。谢谢,问题已经结束:)