与 ElasticSearch 相比,通过 Kafka 创建唯一的传入文档列表的最有效方法是什么?

What is the most efficient way of creating a unique list of incoming documents through Kafka when compared with those in ElasticSearch?

在 ElasticSearch 中,我将有一个 RSS 文档的索引类型,每个文档都有自己的哈希值。

接下来,我有一个调度程序,它通过 Kafka Connect 从提要中检索 RSS 文档列表,以添加为微服务代理。

使用 BulkRequestBuilder 或 BulkProcessor,哪个选项最好(我还读到,由于性能问题,后者更可取):

  1. 将所有传入的 RSS 文档添加到具有基于标题的散列的列表中;遍历列表并删除任何与 ES
  2. 中的哈希匹配的文档
  3. 在将文档添加到列表之前,检查其哈希值是否已存在于 ES 数据库中,然后将其添加到列表

也许还有更好的方法,我欢迎。

文档一旦被消费就会从 Kafka 中删除,那么在这种情况下使用 Kafka Streams 会起作用吗?现在,我们不是通过各种查询来进行比较,而是在 Kafka 生产者代码中使用 Exactly-Once,或者在消费者代码中使用它 - 类似的东西。

如果我在正确的轨道上,有人可以详细说明吗?

使用 Bulk option,现有文档 ID 将完全替换为传入的文档 ID,如果这对用例来说没问题,您无需在那里做任何额外的事情。

Kafka 在大多数情况下可以保证一次交付,但不是所有时间都可以,前提是您的生产者不会重复生成消息,少数消息(潜在的重复交付)可能会在 kafka集群,消费者应该有办法处理它。

另一方面,Kafka 与其他传统代理(基于 JMS)不同,消息不会在消费时从 kafka 中删除,这是由 retention period setting per topic or generally 驱动的。这样做的好处是,您可以随时返回 in-time 以使用旧消息或构建新的 use-cases 需要使用旧消息。