业务场景:
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 [<http_request>] 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%,可做适当调整。