elasticsearch,apache-kafka,Node.js,elasticsearch,Apache Kafka" /> elasticsearch,apache-kafka,Node.js,elasticsearch,Apache Kafka" />

Kafka使用node.js搜索Elasticsearch消费

Kafka使用node.js搜索Elasticsearch消费,node.js,elasticsearch,apache-kafka,Node.js,elasticsearch,Apache Kafka,我知道有相当多的node.js模块实现了一个Kafka消费者,它获取MSG并写入到elastic。但是我只需要每个消息中的一些字段,而不是所有字段。是否存在我不知道的现有解决方案?问题是询问node.js中的示例。可以与模块结合使用的: 注意:当发送大量消息时,使用索引API不是一种好的做法,因为它要求Elasticsearch为每个操作创建一个线程,这显然是浪费,如果线程池因此耗尽,最终将导致拒绝请求。在任何大容量摄入情况下,更好的解决方案是研究使用类似(或构建在其之上)的东西,它构建在官方e

我知道有相当多的node.js模块实现了一个Kafka消费者,它获取MSG并写入到elastic。但是我只需要每个消息中的一些字段,而不是所有字段。是否存在我不知道的现有解决方案?

问题是询问node.js中的示例。可以与模块结合使用的:

注意:当发送大量消息时,使用索引API不是一种好的做法,因为它要求Elasticsearch为每个操作创建一个线程,这显然是浪费,如果线程池因此耗尽,最终将导致拒绝请求。在任何大容量摄入情况下,更好的解决方案是研究使用类似(或构建在其之上)的东西,它构建在官方elasticsearch js客户端之上。然而,我从来没有使用过这些客户端扩展,所以我不知道它们是否工作得很好,但是使用它们只会取代我正在显示索引的部分

我不相信node.js方法在维护和复杂性方面实际上比下面的Logstash方法更好,所以我将两者都留在这里作为参考


更好的方法可能是从Logstash消费卡夫卡,然后将其发送到Elasticsearch

您应该能够使用Logstash以直接的方式使用and来完成这项工作

日志存储管道中的每个文档称为“事件”。Kafka输入假定它将接收传入的JSON(可由其编解码器配置),它将使用该消息中的所有字段填充单个事件

然后,您可以删除那些您不想处理的字段,或者有条件地删除整个事件

input {
  # Receive from Kafka
  kafka {
    # ...
  }
}

filter {
  if [some_special_field] == "drop" {
    drop { } # skip the entire event
  }

  # drop specific fields
  mutate {
    remove_field => [
      "field1", "field2", ...
    ]
  }
}

output {
  # send to Elasticsearch
  elasticsearch {
    # ...
  }
}

当然,您需要配置Kafka输入(从第一个链接)和Elasticsearch输出(以及第二个链接)。

前面的答案对于生产是不可伸缩的


您必须使用ElasticSearch批量API。您可以使用此NPM软件包,它允许您将数据从卡夫卡发送到ES(到2019年5月,ES到卡夫卡的双工连接仍在开发中)

这看起来是一个很好的答案,但不适用于nodeOh,woops。我误读了
节点
,就像误读了ES节点一样。不是node.js.:)我不知道node.js中有什么等效的东西,但是
kafka节点
使它变得非常简单,它应该可以与
elasticsearch js
客户端结合起来做同样的事情。我将添加一个简短的示例。@MattanBitner添加了一个node.js示例。我犯了与@pickypg相同的错误,并给出了一般的回答(由于脱离主题,答案被删除)但添加“node.js”标签可能会有所帮助。
input {
  # Receive from Kafka
  kafka {
    # ...
  }
}

filter {
  if [some_special_field] == "drop" {
    drop { } # skip the entire event
  }

  # drop specific fields
  mutate {
    remove_field => [
      "field1", "field2", ...
    ]
  }
}

output {
  # send to Elasticsearch
  elasticsearch {
    # ...
  }
}