[英]correctly delete record from Kafka ktable
我想从KTable中正确删除对象。
我有以下流处理数据:
input
.map(this::deserialize)
.filter(((key, event) ->
Arrays.asList(
"AssessmentInitialized",
"AssessmentRenamed",
"AssessmentDeleted"
).contains(event.eventType())))
.map( ... do mapping ... )
.groupBy((key, event) -> key, Serialized.with(Serdes.String(), domainEventSerde))
.aggregate(
Assessment::new,
(key, event, assessment) -> assessment.handleEvent(event),
Materialized.<String, Assessment, KeyValueStore<Bytes, byte[]>>as(ASSESSMENTS_STORE)
.withKeySerde(Serdes.String())
.withValueSerde(assessmentSerde)
);
and assessment.handleEvent(event)
在处理AssessmentDeleted
事件时返回null
。 Serde是this.assessmentSerde = new JsonSerde<>(Assessment.class, objectMapper);
其中,映射器是默认的com.fasterxml.jackson.databind.ObjectMapper bean。
在此流处理完事件之后,我在Kafka KTable changelog中看到以下值:
{
"topic": "events-consumer-v1-assessments-store-changelog",
"key": "5d6d7a70-c907-460f-ac88-69705f079939",
"value": "ée",
"partition": 0,
"offset": 2
}
它看起来不像我想要的东西。 这样删除对象的方法正确吗? 我期望如果将null作为值推入聚合操作,它将被删除,但看起来好像有些残废,而且我不确定其映射器问题还是删除方式不正确或KTable行为正确。
在您看来,问题出在检查工具中。 由于某些原因,它无法正确反序列化null
值。 始终最好先使用Kafka工具进行检查( kafka-console-consumer.sh
, kafka-console-producer.sh
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.