简体   繁体   English

从Kafka ktable正确删除记录

[英]correctly delete record from Kafka ktable

I want to correctly delete object from KTable. 我想从KTable中正确删除对象。

I have following stream processing data: 我有以下流处理数据:

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) returns null when it processes AssessmentDeleted event. and assessment.handleEvent(event)在处理AssessmentDeleted事件时返回null Serde is this.assessmentSerde = new JsonSerde<>(Assessment.class, objectMapper); Serde是this.assessmentSerde = new JsonSerde<>(Assessment.class, objectMapper); where mapper is default com.fasterxml.jackson.databind.ObjectMapper bean. 其中,映射器是默认的com.fasterxml.jackson.databind.ObjectMapper bean。

After I event is processed by this stream I see in Kafka KTable changelog following value: 在此流处理完事件之后,我在Kafka KTable changelog中看到以下值:

{
"topic": "events-consumer-v1-assessments-store-changelog",
"key": "5d6d7a70-c907-460f-ac88-69705f079939",
"value": "ée",
"partition": 0,
"offset": 2
}

And it doesn't look like something I want to have. 它看起来不像我想要的东西。 Is that way of deleting object correct? 这样删除对象的方法正确吗? I expected that if I push null as value to aggregate operation it will be removed, but looks like some trash left and I'm not sure if its mapper problem or incorrect way of deletion or correct KTable behavior. 我期望如果将null作为值推入聚合操作,它将被删除,但看起来好像有些残废,而且我不确定其映射器问题还是删除方式不正确或KTable行为正确。

In you case it seems, that an issue was in a checking tool. 在您看来,问题出在检查工具中。 Because of some reason it deserialize null value not properly. 由于某些原因,它无法正确反序列化null值。 Always it good to use Kafka tools to check it first ( kafka-console-consumer.sh , kafka-console-producer.sh ). 始终最好先使用Kafka工具进行检查( kafka-console-consumer.shkafka-console-producer.sh )。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM