private void parsingFailed(Envelope envelope, Exception parseException) { String messageType = "NoValidEnvelope"; String topic = record.topic(); String warnMsg; if (envelope != null) { messageType = envelope.getMessageType(); warnMsg = "Cannot parse inner payload message."; } else { warnMsg = "Cannot parse Envelope from raw record."; } logger.warn(logMarkerFromRecordAndEnvelope(envelope), warnMsg, parseException); logger.debug(logMarkerFromRecordAndEnvelope(envelope), "Message {} with offset {} in {}-{} marked as consumed.", messageType, record.offset(), topic, record.partition()); if (metricsBuilderFactory != null) { GoCounter parsingFailureCounter = metricsBuilderFactory.newMetric("messaging_consumer_parse_failures") .withTag("messageType", messageType) .withTag("topic", topic) .buildCounter(); parsingFailureCounter.incFailure(); } }
private Message<? extends com.google.protobuf.Message> parseMessage() { Envelope envelope = null; try { envelope = Envelope.parseFrom(record.value()); } catch (InvalidProtocolBufferException parseError) { markAsConsumed(record.offset()); parsingFailed(envelope, parseError); return null; } try { MessageType type = new MessageType(envelope.getMessageType()); Parser<com.google.protobuf.Message> parser = typeDictionary.parserFor(type); if (parser == null) { throw new UnknownMessageTypeException(type); } com.google.protobuf.Message innerMessage = parser.parseFrom(envelope.getInnerMessage()); return Messages.fromKafka(innerMessage, envelope, record); } catch (InvalidProtocolBufferException | UnknownMessageTypeException unrecoverableParsingError) { markAsConsumed(record.offset()); parsingFailed(envelope, unrecoverableParsingError); return null; } }
private Marker logMarkerFromRecordAndEnvelope(Envelope envelope) { LogstashMarker logMarker = append("topic", record.topic()) .and(append("partitionId", record.partition())) .and(append("distributionKey", record.key())) .and(append("offset", record.offset())); if (envelope != null) { logMarker .and(append("messageId", envelope.getMessageId())) .and(append("correlationId", envelope.getCorrelationId())) .and(append("messageType", envelope.getMessageType())); } return logMarker; } }