Hao Yu created FLINK-41265:
------------------------------
Summary: Add a metric for JSON messages with ignored parse errors
Key: FLINK-41265
URL: https://issues.apache.org/jira/browse/FLINK-41265
Project: Flink
Issue Type: Improvement
Components: Formats (JSON, Avro, Parquet, ORC, SequenceFile), Runtime
/ Metrics
Affects Versions: 2.3.0
Reporter: Hao Yu
Problem
When json.ignore-parse-errors is enabled, JSON parsing or field conversion
errors can be ignored without a metric indicating how many input messages were
affected.
There are two relevant cases:
- Invalid JSON causes a message to be skipped.
- A field conversion fails and the field is set to null, while the remaining
row is still emitted.
For example, with an INT field named "id", the input \{"id":"abc"} may produce
a row whose id is null. Counting only errors caught by the outer
deserialization method would miss this case.
Motivation
In production, this option may have been enabled long before an incident, and
the users investigating the issue may no longer be aware of it. The job
continues running without failing, but some expected records are missing or
some fields unexpectedly become null. Users may therefore suspect data loss in
Flink, without realizing that parsing errors are being ignored according to the
configured behavior.
Users also need visibility into when invalid input starts appearing. A metric
exposed on a monitoring dashboard would help them:
- Identify when ignored parsing errors first occur.
- Observe how their frequency changes over time.
- Determine how long the problem persists and whether it is still ongoing.
- Correlate the incident with upstream data or schema changes.
- Configure alerts when ignored parsing errors occur or increase.
The metric would make these errors observable while preserving the existing
error-tolerant behavior.
Proposed change
Add a counter named numMessagesWithParseErrors to the plain JSON format,
registered through DeserializationSchema.InitializationContext when
json.ignore-parse-errors is enabled.
The counter should:
- Cover both the JsonNode and streaming JsonParser decoders.
- Include ignored JSON parsing errors and ignored field conversion errors.
- Increment at most once per input message, even if multiple fields fail.
- Treat a top-level JSON array as one input message, regardless of how many
rows it produces.
- Exclude accepted null field values, permitted missing fields, and empty
inputs that do not cause parsing exceptions.
- Preserve existing deserialization behavior.
The counter represents affected input messages, including messages that still
produce rows with null fields. It should not be interpreted as the number of
dropped output rows.
Scope
This issue covers the plain JSON format.
CDC formats and connector-specific metric context changes are outside its
scope. File-source metric reporting and Kafka key/value metric-group isolation
require separate follow-ups.
Related work
FLINK-20789 tracks the broader request for metrics in formats supporting
ignore-parse-errors. This issue proposes the JSON-specific implementation.
https://issues.apache.org/jira/browse/FLINK-20789
FLINK-38819 added logging for ignored JSON parsing errors. This proposal adds a
counter that can be used directly by monitoring dashboards and alerts.
https://issues.apache.org/jira/browse/FLINK-38819
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)