Я пытаюсь обновить KTable частичными данными объекта. Например. Пользовательский объект {"id":1, "name":"Joe", "age":28}
Объект передается в тему и группируется по ключу в KTable. Теперь пользовательский объект частично обновляется следующим образом {"id":1, "age":33}
и передается в таблицу. Но обновленная таблица выглядит следующим образом {"id":1, "name":null, "age":28}
. Ожидаемый выход {"id":1, "name":"Joe", "age":33}
. Как я могу использовать потоки Кафки и весенние облачные потоки для достижения ожидаемого результата. Мы ценим любые предложения. . Спасибо
1006 * Вот код
@Bean
public Function<KStream<String, User>, KStream<String, User>> process() {
return input -> input.map((key, user) -> new KeyValue<String, User>(user.getId(), user))
.groupByKey(Grouped.with(Serdes.String(), new JsonSerde<>(User.class))).reduce((user1, user2) -> {
user1.merge(user2);
return user1;
}, Materialized.as("allusers")).toStream();
}
и модифицированный объект пользователя с ниже код:
public void merge(Object newObject) {
assert this.getClass().getName().equals(newObject.getClass().getName());
for (Field field : this.getClass().getDeclaredFields()) {
for (Field newField : newObject.getClass().getDeclaredFields()) {
if (field.getName().equals(newField.getName())) {
try {
field.set(this, newField.get(newObject) == null ? field.get(this) : newField.get(newObject));
} catch (IllegalAccessException ignore) {
}
}
}
}
}
Является ли это правильный подход, или любой другой подход в KStreams