Kafka kstream比较来自两个不同主题的两个值

时间:2019-07-30 15:49:29

标签: apache-kafka apache-kafka-streams

我目前正在尝试针对两个不同的主题发送同一事件的两种不同格式。假设格式A为主题A,格式B为主题B。

并且格式B仅发送大约15%的时间,因为旧版本不支持该格式。如果发送了B,则每个事件都将有一个A。

我想做的是同时听他们说话,如果B存在,我需要丢弃A。

到目前为止,我一直在尝试同时听这两种音乐(即使用kstreams), 并进行流-流加入

streamA.leftJoin(streamB, (A_VALUE, B_VALUE) -> {
                    if (B_VALUE != null && A_VALUE != null) {
                        return B_VALUE
                    } else if (A_VALUE != null && B_VALUE == null) {
                        return A_VALUE
                    }
                    return null;
                },
                JoinWindows.of(Duration.ofMinutes(5)).grace(Duration.ofMinutes(15)),
                Joined.with(
                        Serdes.String(),
                        Serdes.String(),
                        Serdes.String()
                ))

以50-200个事件/秒的负载运行测试,结果如下: 发送的B_VALUE个数字始终正确, 但是数字A_VALUE比预期的要大。

我认为有时会同时发送A和B。

我尝试使用番石榴缓存作为“带有TTL的哈希图”,存储所有B事件,然后进行比较。在这里,我发现总数始终是正确的,但是B事件比预期的少,这意味着有时找不到匹配项。

如果有一种更好的方法可以在不使用数据库的情况下进行操作,那么请立即打开它!

注意:关联的唯一事件始终具有相同的密钥,例如<432,A_VALUE>,<432,B_VALUE>。

0 个答案:

没有答案