Flume + ElasticSearch 接收器 TTL
Flume + ElasticSearch Sink TTL
我对 Apache 的 elasticsearch sink 中的 TTL 有疑问flume
我正在研究弹性搜索 + flume 集成。
我正在使用 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
注意,为了测试,有一个1m(1分钟)的ttl。
我看到事件被添加到 ES 中,但一分钟后没有被删除。
"mapping" 查询也没有显示有 TTL。
我知道默认情况下 TTL 是禁用的,所以我可以这样启用它:
>> PUT: http://localhost:9200/_all/platformtype/_mapping
with body:
{"platformtype" : {"_ttl" : {"enabled" : true, "default" : "2m"}}}
请注意,现在是 2 分钟 TTL(只是为了与接收器定义不同)
所以,现在如果我添加其他事件,它们会在 1 分钟后被删除...
那么有人可以阐明这到底应该如何工作吗?是错误还是我必须手动启用 TTL?
谢谢
嗯,原来是这样工作的:
必须通过 elasticsearch 中的映射 API 启用 TTL。如果没有完成,从 Flume 发送的 TTL 将被忽略。
现在,在 elasticsearch 级别启用的 TTL 和提供的定义工作如下:
"索引 'platformtype' 将具有默认值为 2 分钟的 TTL。
因此,如果我在 flume 级别禁用 TTL,消息将在 2 分钟内删除(TTL 未在从 flume 发送的事件中指定,因此默认值起作用)。
或者,如果 flume 提供了明确的 TTL 值,它将优先于默认的 TTL 定义,所以在这种情况下,相应的记录确实会在 1 分钟内删除,因为我已经提到。
希望这会对某些人有所帮助。谢谢,问题已关闭:)
我对 Apache 的 elasticsearch sink 中的 TTL 有疑问flume
我正在研究弹性搜索 + flume 集成。 我正在使用 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
注意,为了测试,有一个1m(1分钟)的ttl。
我看到事件被添加到 ES 中,但一分钟后没有被删除。 "mapping" 查询也没有显示有 TTL。 我知道默认情况下 TTL 是禁用的,所以我可以这样启用它:
>> PUT: http://localhost:9200/_all/platformtype/_mapping
with body:
{"platformtype" : {"_ttl" : {"enabled" : true, "default" : "2m"}}}
请注意,现在是 2 分钟 TTL(只是为了与接收器定义不同)
所以,现在如果我添加其他事件,它们会在 1 分钟后被删除...
那么有人可以阐明这到底应该如何工作吗?是错误还是我必须手动启用 TTL?
谢谢
嗯,原来是这样工作的: 必须通过 elasticsearch 中的映射 API 启用 TTL。如果没有完成,从 Flume 发送的 TTL 将被忽略。
现在,在 elasticsearch 级别启用的 TTL 和提供的定义工作如下:
"索引 'platformtype' 将具有默认值为 2 分钟的 TTL。 因此,如果我在 flume 级别禁用 TTL,消息将在 2 分钟内删除(TTL 未在从 flume 发送的事件中指定,因此默认值起作用)。
或者,如果 flume 提供了明确的 TTL 值,它将优先于默认的 TTL 定义,所以在这种情况下,相应的记录确实会在 1 分钟内删除,因为我已经提到。
希望这会对某些人有所帮助。谢谢,问题已关闭:)