公司的老项目了,采用的是sqlserver 2022作为数据卡做的,但是产品对接客户,发现对搜索的要求很高,尤其是全文检索,考虑到ES采用倒排所以效率上的优势和整体开发的成本,大佬们商量之后,果断的采用了Elasticsearch作为搜索引擎的策略,那么剩下的就是如何将数据同步到ES的问题了,这个的一部分也就是我的工作了,所以分享一下自己工作过程当中的思路和遇到的问题。
一、整体同步思路
1. 同步架构选择
方案 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
CDC + Logstash | 实时性好,低延迟 | 配置复杂 | 需要准实时同步 |
定时批量导出导入 | 实现简单 | 数据延迟大 | 非实时分析场景 |
触发器+消息队列 | 灵活可控 | 影响源库性能 | 高定制化需求 |
第三方工具(如Debezium) | 开箱即用 | 额外成本 | 企业级解决方案 |
2. 采用方案:变更数据捕获(CDC) + Logstash 管道
二、具体实现案例
步骤1:启用CDC
-- 在数据库级别启用CDC EXEC sys.sp_cdc_enable_db; -- 对特定表启用CDC EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'Products', @role_name = NULL, @supports_net_changes = 1;
步骤2:配置Logstash管道
input { jdbc { jdbc_driver_library => "D:/sqljd