记录Elasticsearch circuit_breaking_exception异常解决


业务场景:

Flink消费Kafka数据写入ES

组件版本:

CDH:6.3.0

Flink:1.12.1

Elasticsearch:7.7.0

异常明细:

Caused by: ElasticsearchStatusException[Elasticsearch exception [type=circuit_breaking_exception, reason=[parent] Data too large, data for [] would be [1979396994/1.8gb], which is larger than the limit of [1972122419/1.8gb], real usage: [1977917952/1.8gb], new bytes reserved: [1479042/1.4mb], usages [request=0/0b, fielddata=4008586/3.8mb, in_flight_requests=7691406/7.3mb, accounting=6917604/6.5mb]]]

异常原因:

由于ES有熔断器机制,一旦内存使用超过熔断器的限则将会触发熔断,不再响应任何请求,导致程序终止,但ES健康情况不受影响。
日志显示实际使用量[1979396994/1.8gb]已经超过了限制[1972122419/1.8gb],故触发熔断机制。

解决办法:

1、调大ES JVM堆内存
ES默认是2g,根据服务器配置做调整,一般建议为服务器内存的一半,并且建议Xms与Xmx大小一致。

(1)散搭ES修改方式:编辑jvm.options

(2)CDH修改方式:

详细内存配置说明可参考:
https://blog.csdn.net/duanzelun/article/details/106948808

2、调大字段数据熔断器(写场景)
如果服务器没有足够的内存可考虑此选项,indices.breaker.fielddata.limit默认为堆内存的40%,可做适当调整。

es