- Если я придерживаюсь вышеуказанного подхода, как я могу сопоставить конкретное сообщение, присутствующее в теме1, с конкретным сообщением в теме2.Есть ли способ предоставить одинаковые идентификаторы сообщений в topic1 и topic2?
Чтобы отобразить или объединить определенные сообщения между темами в одном кластере Kafka, возможно, Kafka Stream и KSQL - это хорошее направлениесделать.Можете ли вы найти ссылку здесь .
Существует множество способов сделать объект уникальным, и я предлагаю использовать идентификатор родительского объекта при отправке сообщений в topic1 и topic2.Пример кода Java выглядит следующим образом:
ProducerRecord<String, ParentEntity> record = new ProducerRecord<>(topic1,
ParentEntity.getId(), ParentEntity);
ListenableFuture<SendResult<String, ParentEntity>> future =
kafkaTemplate.send(record);
future.addCallback(new ListenableFutureCallback<SendResult<String,
ParentEntity>>() {
@Override
public void onSuccess(SendResult<String, ParentEntity> result) {}
@Override
public void onFailure(Throwable ex) {
//print out error log
}
});
ProducerRecord<String, ChildEntity> record = new ProducerRecord<>(topic2,
ChildEntity.getParentEntityId(), ChildEntity);
ListenableFuture<SendResult<String, ChildEntity>> future =
kafkaTemplate.send(record);
future.addCallback(new ListenableFutureCallback<SendResult<String,
ChildEntity>>() {
@Override
public void onSuccess(SendResult<String, ChildEntity> result) {}
@Override
public void onFailure(Throwable ex) {
//print out error log
}
});
Есть ли способ решить эту проблему, если я использую одну тему?
Вы можете создать новую таблицу (сказал A) в базе данных, чтобы сохранить полное сообщение для отправкидля индексации.Каждый раз, когда пользователь создает или обновляет данные, сообщение также должно быть вставлено / обновлено в таблицу A. Наконец, ваш клиент Kafka извлекает объекты сообщения из таблицы A и создает уникальную тему в кластере Kafka.
Есть ли лучший дизайн / подход для решения вышеуказанной проблемы?
Можете ли вы попробовать Kafka Stream и KSQL, как я упоминал выше.