Apache kafka 如何识别和合并kafka中不同队列的消息
背景:Apache kafka 如何识别和合并kafka中不同队列的消息,apache-kafka,Apache Kafka,背景: 我们以前使用hibernate搜索、Lucene和jboss hornetq队列进行索引 我们的应用程序是生产者,将元数据(用于识别数据库中记录的唯一数据信息)发送到hornetq。 使用者接收此元数据并查询数据库以获取完整的记录详细信息(包括子对象)。 这是一种更加以数据库为中心的方法 现在,我们希望消除以数据库为中心的索引方法。我们决定用卡夫卡而不是大黄蜂 用户创建数据时没有问题 我们发现,当用户编辑数据(例如,具有两个子对象的父实体)时,存在潜在问题。从数据库中提取数据以供用户显示
我们以前使用hibernate搜索、Lucene和jboss hornetq队列进行索引 我们的应用程序是生产者,将元数据(用于识别数据库中记录的唯一数据信息)发送到hornetq。 使用者接收此元数据并查询数据库以获取完整的记录详细信息(包括子对象)。 这是一种更加以数据库为中心的方法 现在,我们希望消除以数据库为中心的索引方法。我们决定用卡夫卡而不是大黄蜂 用户创建数据时没有问题 我们发现,当用户编辑数据(例如,具有两个子对象的父实体)时,存在潜在问题。从数据库中提取数据以供用户显示时,
我们将相同的数据推送到卡夫卡主题1。当用户修改数据(比如parenet级别的数据)并提交时。我们只获取父级数据(不获取子对象数据),我们将更改后的数据推送到topic2。现在我们必须将topic1(子对象)中的消息与topic2(父级数据)中的相应消息合并 注意:我们必须采用这种方法,因为您知道索引中没有更新,而是先删除,然后插入 问题:
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
}
});
ProducerRecord记录=新的ProducerRecord(主题1,
ParentEntity.getId(),ParentEntity);
可列出的未来=
kafkaTemplate.send(记录);
future.addCallback(新ListenableFutureCallback(){
@凌驾
成功时公共无效(SendResult结果){}
@凌驾
失效时的公共无效(可丢弃的ex){
//打印出错误日志
}
});
生产记录=新生产记录(主题2,
getParentEntityId(),ChildEntity);
可列出的未来=
kafkaTemplate.send(记录);
future.addCallback(新ListenableFutureCallback(){
@凌驾
成功时公共无效(SendResult结果){}
@凌驾
失效时的公共无效(可丢弃的ex){
//打印出错误日志
}
});
您可以试试我上面提到的Kafka Stream和KSQL吗。谢谢您的快速响应。我将尝试您的解决方案,并稍后通知您