【问题标题】:Error writing to Elasticsearch, some elements could not be inserted from dataflow写入 Elasticsearch 时出错,无法从数据流中插入某些元素
【发布时间】:2020-04-22 14:37:38
【问题描述】:

elasticsearch 版本 6.8.5
ElasticsearchIO 2.15.0
数据流版本 2.15.0

我的集群中有 3 个节点,在同一台机器上我有 gcp 中的实例,它有 6 个内核和 16GB 的内存,我为每个节点设置了 4gb

我有 5 个索引 每个索引 2 个分片 2 个副本

数据流在2分钟内向elasticsearch发送总共2K条记录到每个索引总共10K条记录

并将下一个错误发送给我

java.io.IOException: Error writing to Elasticsearch, some elements could not be inserted:
Document id jnlmbW8BnhRHn7hU2cLS: rejected execution of processing of [10948][indices:data/write/bulk[s][p]]: request: BulkShardRequest [[indexname][0]] containing [3] requests, target allocation id: M40WguEMSTmWedf2c6LuAg, primary term: 1 on EsThreadPoolExecutor[name = C2JZ4zA/write, queue capacity = 200, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@51a06c32[Running, pool size = 6, active threads = 6, queued tasks = 224, completed tasks = 1026]] (es_rejected_execution_exception)

我检查了 elasticsearch 中的结果和记录是否丢失
例如数据流说处理 1850 条记录,在弹性搜索中有 1800 有什么想法吗?

【问题讨论】:

    标签: java elasticsearch google-cloud-dataflow


    【解决方案1】:

    这意味着你压倒了请求队列。您的队列已满,节点刚刚开始忽略新请求。 您可以尝试增加队列的大小,如您所见here 如果增加队列大小不起作用,则必须增加处理能力(通过添加新节点或改进现有节点)或减少一段时间内的请求数。首先,我建议您监控您的节点并注意发生了什么。

    希望对你有帮助。

    【讨论】:

    • 感谢您的回复,我有 3 个节点,看起来文档很少,您能推荐我需要多少个节点和机器大小(cpu ram 等)吗?
    • 我为您找到了另一种选择。您的问题可能不仅仅是硬件,而是配置文件。尝试增加实例中线程池队列的大小,您可以在此处找到elastic.co/guide/en/elasticsearch/reference/current/…
    • 看起来不错,但我没有找到通过 api rest 更改此设置的位置?还是文件配置?
    • 我添加了更多队列来写入线程池,并且这个参数可以达到硬件的限制,所以我们可以看看如果错误再次出现,我们是否需要更多的硬件资源这个参数必须在所有节点中设置我修改文件夹 /etc/elasticsearch 中的文件 elasticsearch.yml 我添加了这一行 thread_pool.write.queue_size : 500
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多