java - Elasticsearch 性能分析

标签 java elasticsearch kibana

我们目前正在评估 Elasticsearch 作为我们的分析解决方案。主要驱动因素是,一旦数据填充到 Elasticsearch 中,Kibana 就可以免费提供报告。

在采用它之前,我的任务是对该工具进行性能分析。

主要要求是支持 500 evt/秒的 PUT 速率。

我目前正在从如下的小设置开始,只是为了在将其上传到更严肃的实验室之前了解 API。

我的策略基本上是,检查与我需要的格式相对应的分析 CSV,并将它们放入 Elasticsearch 中。我没有使用批量 API,因为实际上事件不会以批量方式到达。

以下是执行此操作的主要代码:

        // Created once, used for creating a JSON from a bean
        ObjectMapper mapper = new ObjectMapper();

        // Creating a measurement for checking the count of sent events vs
        // ES stored events
        AnalyticsMetrics metrics = new AnalyticsMetrics();
        metrics.startRecording();

        File dir = new File(mFolder);
        for (File file : dir.listFiles()) {

            CSVReader reader = new CSVReader(new FileReader(file.getAbsolutePath()), '|');
            String [] nextLine;
            while ((nextLine = reader.readNext()) != null) {
                AnalyticRecord record = new AnalyticRecord();
                record.serializeLine(nextLine);

                // Generate json
                String json = mapper.writeValueAsString(record);

                IndexResponse response = mClient.getClient().prepareIndex("sdk_sync_log", "sdk_sync")
                        .setSource(json)
                        .execute()
                        .actionGet();

                // Recording Metrics
                metrics.sent();

            }
        }

        metrics.stopRecording();

        return metrics;

我有以下问题:

  1. 如何通过 API 知道所有请求何时完成并且数据已保存到 Elasticsearch 中?我可以查询 Elasticsearch 以获取特定索引中的对象计数,但这样做本身就会成为一个新的性能因素,因此我将消除此选项。
  2. 以上是将对象插入 Elasticsearch 的最快方法吗?或者我还可以做其他优化吗?请记住,批量 API 目前不是一个选项。

提前致谢。

P.S:我在客户端和服务器上使用的 Elasticsearch 版本是 1.0.0。

最佳答案

  1. Elasticsearch 索引响应具有 isCreated() 方法,如果文档是新文档,则返回 true;如果已更新,则返回 false,并且可用于查看文档是否已成功插入/更新。

  2. 如果批量索引不可行,则可以调整其他方面来提高性能,例如

    • 使用 index.refresh_interval 增加索引刷新间隔
    • 通过将 index.number_of_replicas 设置为 0 来禁用副本
    • 禁用_source_all如果不需要字段。

关于java - Elasticsearch 性能分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22068192/

相关文章:

elasticsearch - kibana 4.0 中比率的趋势

elasticsearch - ELK的规划能力需要考虑哪些因素?

elasticsearch - 运行 localhost 时如何解决 kibana 错误请求问题

elasticsearch - 如何在Kibana中合并名称不同但值相同的2个字段

java - 无法将我的Java应用程序连接到Elastic Stack实例

java - 使用 java 连接由 Pipe 和 ':' 分隔的整数值

user-interface - Elasticsearch搜索前端演示

search - 使用River插件时如何创建初始Elasticsearch设置

java - Java 中的属性文件监听器?

java - Apache Spark Broadcast 变量是 Broadcast 类型?不是RDD?