我有以下集群:
Kafka->一些日志收集器-> Elasticsearch
我的问题是选择最高效的日志收集器(或其他一些软件,该软件可以管理Kafka和ElasticSearch之间的数据流)。
我正在尝试从 Logstash , Fluentd 和 Confluent的Kafka Elasticsearch连接器中进行选择。 我面临的主要问题是在写入Elasticsearch端点时遇到问题,无法在Kafka中进行回滚偏移。
例如,logstash文档说“ 400 和 404 ”错误已发送到死信队列(DLQ)(如果已启用)。如果未启用DLQ,将会发出一条日志消息,并且该事件将被丢弃”(https://www.elastic.co/guide/en/logstash/6.x/plugins-outputs-elasticsearch.html#_retry_policy)。如果我有这样的错误,logstash将继续从Kafka读取数据。错误会一次又一次地发生。虽然,我的所有数据都将存储在DLQ中,但是当发生第一个错误时,Kafka的偏移量将远离该位置。我将不得不手动定义正确的偏移量。
所以,我的问题是: 是否有用于Kafka和ElasticSearch的连接器,在从ElasticSearch(400/404)收到第一个错误后,该连接器允许停止偏移移动?
谢谢。
答案 0 :(得分:0)
我认为问题不在于效率,而在于可靠性
我面临的主要问题是在写到Elasticsearch端点时无法在Kafka中进行回滚偏移。
我对Connect或Logstash的DLQ功能没有太多经验,但是重置使用者组偏移量并非没有可能。但是,如果使用者应用程序正确处理偏移量提交,则不必这样做。
如果Connect向ES抛出连接错误,它将重试,而不是提交偏移量。
如果错误无法恢复,则Connect将停止使用,并且再次不提交偏移量。
因此,从消息批处理中丢失数据的唯一方法是,无论使用任何框架,该批处理都以DLQ结尾。
如果禁用了DLQ,丢失数据的唯一方法是从卡夫卡过期