使用 Apache Kafka 将数据从 MSSQL 同步到 Elasticsearch

Posted

技术标签:

【中文标题】使用 Apache Kafka 将数据从 MSSQL 同步到 Elasticsearch【英文标题】:Synchronizing data from MSSQL to Elasticsearch using Apache Kafka 【发布时间】:2018-01-16 12:21:22 【问题描述】:

我目前正在 SQL Server 中运行文本搜索,这已成为瓶颈,出于显而易见的原因,我想将内容移至 Elasticsearch,但我知道我必须对数据进行非规范化以获得最佳性能和可扩展性。

目前,我的文本搜索包括一些聚合和连接多个表以获得最终输出。已连接的表并没有那么大(每个表最多 20GB),但会不定期地更改(插入、更新、删除)(其中两个每周一次,另一个按需 x 次每天)。

我的计划是将 Apache Kafka 与 Kafka Connect 一起使用,以便从我的 SQL Server 读取 CDC,将这些数据加入 Kafka 并将其保存在 Elasticsearch 中,但是我找不到任何材料告诉我何时处理删除数据被持久化到 Elasticsearch。

这甚至被默认驱动程序支持吗?如果没有,有哪些可能性? Apache Spark、Logstash?

【问题讨论】:

Confluent Elasticsearch 连接器目前不支持通过墓碑删除。这可能是一个不错的添加功能,因此请随时记录问题。 @RandallHauch 这令人失望。我会按照你的建议记录一个问题。 @RandallHauch 是否可以创建一个空文档而不是删除它?在我的情况下,这也可以正常工作。 我想这取决于payload 为空时这一行发生的情况,这是墓碑事件的情况。就像我提到的那样,修改此代码以执行其他操作会相对容易,例如改用Delete.Builder(key.id)。唯一的技巧是,如果 Elasticsearch 中的文档碰巧不存在,这是否可以。 【参考方案1】:

我不确定现在在 Kafka Connect 中是否已经可以做到这一点,但似乎可以通过 Nifi 解决。

希望我理解需要,这里是使用标准 NiFi 处理器之一删除 Elasticsearch 记录的文档:

https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-elasticsearch-5-nar/1.5.0/org.apache.nifi.processors.elasticsearch.DeleteElasticsearch5/

【讨论】:

以上是关于使用 Apache Kafka 将数据从 MSSQL 同步到 Elasticsearch的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Kafka JSON 消息中获取 org.apache.kafka.connect.data.Decimal 值 [重复]

学习使用哪个 Kafka API 以将传统集成系统转换为 Apache Kafka

从Apache Kafka到Apache Spark安全地读取数据

专为实时而构建:使用Apache Kafka进行大数据消息传递 第2部分

使用 QuestDB 和 Apache Kafka 处理时间序列数据

为啥我们需要 kafka 向 apache spark 提供数据