使用 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部分