解锁Flink CDC:实时数据同步秘籍

一、引言

Flink CDC,即 Flink Change Data Capture,是基于 Apache Flink 的数据集成工具,它的核心在于变更数据捕获(CDC) 技术,能够实时监测并捕获数据库的变动,包括数据或数据表的插入、更新、删除等操作 ,并将这些变更按发生顺序完整记录下来,写入到消息中间件、数据仓库或其他目标系统中,以供订阅及消费。Flink CDC 通过集成 Debezium 等 CDC 引擎,实现对多种数据库(如 MySQL、PostgreSQL、Oracle 等)变更数据的高效捕获,并将其传输到指定目标系统,如数据仓库、数据湖、消息队列等,在 Java 实时数据处理领域,Flink CDC 占据着举足轻重的地位,是构建实时数据处理链路的关键技术之一。​

在传统的数据处理流程中,要实现数据库之间的数据同步,往往需要搭建复杂的 ETL(Extract,Transform,Load)流程,不仅开发成本高,而且实时性较差。而 Flink CDC 的出现,为实时数据处理带来了全新的解决方案。它基于 Flink 强大的流处理能力,能够高效、可靠地处理海量数据的实时变更,极大地简化了实时数据集成的过程,降低了数据处理的延迟,使得企业能够更快地对数据变化做出响应,为实时业务决策提供有力支持。

在实时数据处理的领域中,为什么众多开发者和企业纷纷选择 Flink CDC 呢?让我们将它与传统数据同步工具进行一番对比,答案便一目了然。

2.1 实时性:毫秒级响应的变革​

传统的数据同步工具,如 Sqoop ,主要用于批量数据传输,通常按照一定的时间间隔(如每天、每小时)进行数据同步。在数据量较大时,同步一次数据可能需要花费数小时甚至更长时间,这种延迟使得数据的时效性大打折扣,无法满足实时业务决策的需求 。而 Flink CDC 基于 CDC 技术,能够实时捕获数据库的变更操作,将数据变更以流的形式实时传输,实现毫秒级的响应。以电商业务为例,当用户下单后,订单数据的变更能够立即被 Flink CDC 捕获并传输到数据分析系统,运营人员可以实时了解订单动态,及时做出库存调整、物流安排等决策,极大地提升了业务的响应速度和运营效率。

2.2 可靠性:数据一致性的坚固保障

数据的可靠性是数据处理的生命线。传统工具在数据同步过程中,一旦出现网络故障、数据源不稳定等情况,很容易导致数据丢失或不一致 。比如 DataX 在单机运行时,受网络闪断影响,可能会出现部分数据传输失败但未被及时察觉的情况,从而破坏数据的完整性。Flink CDC 则集成了 Flink 强大的容错机制,通过 Checkpoint(检查点)技术,能够定期对作业的状态进行快照保存 。当作业出现故障时,可以从最近的检查点进行恢复,确保数据不丢失且处理结果的一致性。在金融交易数据处理中,每一笔交易数据的准确和完整至关重要,Flink CDC 的可靠性保障使得金融机构能够放心地进行实时交易监控和风险评估。

2.3 多数据库支持:一站式的数据集成

随着企业业务的发展,往往会使用多种不同类型的数据库来满足不同业务场景的需求。传统的数据同步工具通常对特定数据库的支持较为有限,若要实现多种数据库之间的数据同步,需要分别配置和管理不同的工具,增加了运维的复杂性和成本 。Flink CDC 则展现出强大的兼容性,它支持 MySQL、PostgreSQL、Oracle、SQL Server 等多种主流数据库 ,无论是关系型数据库还是部分非关系型数据库,都能通过 Flink CDC 实现高效的数据同步。例如,在一个大型企业中,业务数据库使用 MySQL,客户关系管理系统使用 Oracle,数据分析平台使用 PostgreSQL,Flink CDC 可以一站式地将这些不同数据库中的数据集成到统一的数据仓库中,为企业的全面数据分析提供支持。

Flink CDC 的工作原理精妙而复杂,它主要基于 Binlog(二进制日志)技术 ,以 MySQL 为例,深入剖析其工作流程。

3.1 捕获数据变更

Flink CDC 使用专门的数据库连接器,如 MySQL CDC Connector,与 MySQL 数据库建立连接 。连接器通过 Binlog 协议,实时监控数据库的 Binlog 文件,这些文件详细记录了数据库中所有的变更操作,包括 INSERT(插入)、UPDATE(更新)、DELETE(删除)等语句 。当数据库发生数据变更时,相应的操作记录会被写入 Binlog 文件,Flink CDC 连接器能够及时捕捉到这些变更信息。例如,当电商数据库中的商品库存表有新商品入库(INSERT 操作)或库存数量更新(UPDATE 操作)时,Flink CDC 连接器能迅速感知并获取相关变更数据。

3.2 读取 Binlog 日志

连接器通过解析 Binlog 文件,将其中的二进制记录转换为 Flink 能够理解的数据格式 。在这个过程中,它会根据 Binlog 的格式规范,提取出变更操作的类型、涉及的表名、字段名以及具体的变更数据等关键信息 。比如,对于一条 UPDATE 操作的 Binlog 记录,连接器会解析出被更新的表名、更新前的数据以及更新后的数据,以便后续处理。在处理一个订单状态更新的场景中,Binlog 记录包含订单表名、订单 ID、更新前的订单状态(如 "待付款")和更新后的订单状态(如 "已付款"),连接器会准确提取这些信息。

3.3 处理数据流

转换后的数据会以流的形式进入 Flink 的 DataStream 或 Table API 中进行进一步处理 。在 DataStream API 中,可以使用各种算子,如 map(映射)、filter(过滤)、keyBy(按键分组)等,对数据进行复杂的业务逻辑处理 。例如,通过 map 算子可以对捕获到的商品数据进行格式转换,使其符合下游系统的要求;使用 filter 算子可以筛选出特定类别的商品数据,如只保留电子产品类别的数据。在 Table API 中,则可以使用 SQL-like 的语法进行数据处理和分析,如进行多表关联查询、聚合计算等。比如,将商品表与订单表进行关联,统计每个商品的销售数量。

3.4 输出数据

处理后的数据流可以被输出到各种目标系统中 。如果目标是消息队列,如 Kafka,Flink 会将数据按照 Kafka 的协议格式写入相应的主题(Topic),以便其他系统订阅和消费 。在电商场景中,可以将处理后的订单数据写入 Kafka 的 "order - topic" 主题,供数据分析系统或其他业务系统实时获取订单信息。若目标是数据仓库,如 Hive,Flink 会将数据按照 Hive 的表结构和存储格式进行写入,为后续的离线数据分析提供数据支持。

四、核心特性深度解读

4.1 多数据库支持

Flink CDC 的兼容性是其一大亮点,它支持多种主流数据库,包括 MySQL、PostgreSQL、Oracle、SQL Server 等 。这种广泛的兼容性使得企业在面对复杂的数据库环境时,能够轻松实现数据的统一集成和处理。无论企业使用的是哪种数据库,Flink CDC 都能成为连接不同数据源与目标系统的桥梁,打破数据孤岛,为企业提供全面的数据洞察。以一个跨国企业为例,其国内业务数据库使用 MySQL,海外业务数据库使用 Oracle,通过 Flink CDC,能够将这些不同数据库中的数据实时同步到统一的数据平台,便于进行全球业务的综合分析和决策。

4.2 基于日志的变更捕获​

Flink CDC 利用数据库的事务日志,如 MySQL 的 Binlog、PostgreSQL 的 WAL(Write-Ahead Logging) ,来捕获数据的变动。这种基于日志的捕获方式具有诸多优势。由于日志是数据库操作的实时记录,Flink CDC 能够近乎实时地获取数据变更,实现低延迟的数据传输 。同时,日志的顺序性和完备性保证了每个变更事件都能被精确地消费一次,实现 "恰好一次" 的处理语义,确保数据处理的一致性和可靠性 。在金融交易系统中,每一笔交易的记录都至关重要,Flink CDC 基于日志的捕获方式能够确保每一笔交易数据的变更都被准确无误地捕获和处理,为金融风险监控和交易分析提供可靠的数据支持。​

4.3 Exactly-Once 语义保障​

在数据处理过程中,数据的一致性和准确性是至关重要的。Flink CDC 通过 Flink 的 Exactly-Once 语义来保证数据的一致性,确保数据变更在处理过程中不会丢失或重复 。Flink 使用状态一致性检查点(Checkpointing)来定期保存和恢复作业的状态 。当作业发生故障时,Flink 可以从最近的检查点恢复,并重新处理从该检查点开始的所有数据 。在处理电商订单数据时,可能会遇到网络波动或系统故障,但由于 Flink CDC 的 Exactly-Once 语义保障,订单数据的处理结果不会受到影响,无论是订单的创建、修改还是删除操作,都能被准确记录和处理,保证了订单数据的一致性和完整性。​

4.4 灵活的配置选项​

Flink CDC 提供了丰富且灵活的配置选项,使用户可以根据具体的需求配置捕获的数据变更范围、处理逻辑等 。用户可以根据业务需求,配置只捕获特定表、特定字段的变更数据 。在电商数据库中,可能只需要关注商品表中的价格和库存字段的变更,通过 Flink CDC 的配置选项,可以精确地设置只捕获这两个字段的变更数据,减少不必要的数据传输和处理,提高数据处理效率。还可以配置数据的处理逻辑,如数据的过滤、转换等操作 ,以满足不同的业务场景。​

Flink CDC 与 Flink 流处理引擎紧密集成,可以将数据库中的变更作为 Flink 流的输入,进而进行实时数据处理和分析 。在 Flink 的 DataStream API 中,可以利用各种算子对 CDC 数据进行复杂的业务逻辑处理 。在实时监控用户行为数据时,可以通过 map 算子将用户的操作行为数据进行格式转换,使用 filter 算子筛选出特定用户或特定操作的数据,再通过 keyBy 算子和 window 算子进行用户行为的统计分析,如统计用户在特定时间段内的操作次数、操作类型分布等。在 Table API 中,则可以使用 SQL - like 的语法对 CDC 数据进行处理和分析,方便熟悉 SQL 的用户进行操作 。比如,通过 SQL 语句进行多表关联查询,将用户表与订单表关联,分析不同用户的订单购买情况。

理论知识讲了这么多,接下来通过具体的案例来实际感受一下 Flink CDC 的强大功能吧!我们将从最基础的环境搭建开始,一步步实现从 MySQL 数据库到 Flink 的数据同步,并进行数据的过滤与处理 。​

准备工作​

在开始编写代码之前,首先要确保开发环境已经搭建好。需要安装 Java 开发环境(JDK) ,并配置好相关环境变量。同时,引入 Flink CDC 相关的依赖包,如果你使用的是 Maven 项目,可以在pom.xml文件中添加以下依赖:

java 复制代码
<dependencies>
    <!-- Flink核心依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-java</artifactId>
        <version>1.19.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_2.12</artifactId>
        <version>1.19.0</version>
    </dependency>
    <!-- Flink CDC连接器依赖 -->
    <dependency>
        <groupId>com.ververica</groupId>
        <artifactId>flink-sql-connector-mysql-cdc</artifactId>
        <version>3.0.1</version>
    </dependency>
</dependencies>

接下来,还需要配置 MySQL 数据库,确保开启 Binlog 日志。在 MySQL 的配置文件(通常是my.cnf或my.ini)中,找到[mysqld]部分,添加或修改以下配置:

开启Binlog日志

log-bin=mysql-bin

设置服务器ID,确保每个MySQL实例的ID唯一

server-id=1

设置Binlog格式为ROW,能更精确地记录数据变更

binlog-format=ROW

修改完成后,重启 MySQL 服务,使配置生效 。可以通过以下命令检查 Binlog 是否已经开启:

SHOW VARIABLES LIKE 'log_bin';

如果log_bin的值为ON,则表示 Binlog 已经成功开启 。

5.1 DataStream API 实现数据同步

准备工作完成后,使用 Flink CDC 的 DataStream API 实现 MySQL 数据同步。下面是一个简单的代码示例:

java 复制代码
import com.ververica.cdc.connectors.mysql.source.MySqlSource;
import com.ververica.cdc.debezium.JsonDebeziumDeserializationSchema;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class FlinkCDCDataStreamExample {
    public static void main(String[] args) throws Exception {
        // 获取Flink执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);

        // 创建MySQL源
        MySqlSource<String> source = MySqlSource.<String>builder()
               .hostname("localhost")// MySQL主机地址
               .port(3306)  // MySQL端口号
               .username("root")  // MySQL用户名
               .password("123456")  // MySQL密码
               .databaseList("test")  // 要同步的数据库
               .tableList("test.user")  // 要同步的表
               .deserializer(new JsonDebeziumDeserializationSchema())  // 使用JSON反序列化器
               .build();

        // 添加数据源
        DataStreamSource<String> streamSource = env.addSource(source);

        // 打印数据
        streamSource.print();

        // 执行任务
        env.execute("Flink CDC DataStream Example");
    }
}

代码解释:​

  1. 获取执行环境:StreamExecutionEnvironment.getExecutionEnvironment()用于获取 Flink 的执行环境,这是 Flink 流处理程序的入口 。
  2. 创建 MySQL 源:使用MySqlSource.builder()构建 MySQL 数据源,设置了 MySQL 的连接信息,包括主机地址、端口号、用户名、密码,指定了要同步的数据库和表,并使用JsonDebeziumDeserializationSchema将数据反序列化为 JSON 格式的字符串 。
  3. 添加数据源:env.addSource(source)将创建好的 MySQL 数据源添加到 Flink 的执行环境中,生成一个DataStreamSource,表示从 MySQL 读取的数据流 。
  4. 打印数据:streamSource.print()将读取到的数据打印到控制台,方便查看数据同步的结果 。
  5. 执行任务:env.execute("Flink CDC DataStream Example")启动 Flink 任务,开始执行数据同步操作 。

除了使用 DataStream API,还可以使用 Flink SQL 来实现 MySQL 数据的同步,这种方式更加简洁直观,对于熟悉 SQL 的开发者来说非常友好。以下是使用 Flink SQL 创建 CDC 源表、进行数据处理和结果输出的 SQL 语句示例:

java 复制代码
-- 创建MySQL CDC源表
CREATE TABLE mysql_source (
    id INT,
    name STRING,
    age INT
) WITH (
    'connector' ='mysql-cdc',
    'hostname' = 'localhost',
    'port' = '3306',
    'username' = 'root',
    'password' = '123456',
    'database-name' = 'test',
    'table-name' = 'user'
);

-- 创建输出表,这里以打印到控制台为例
CREATE TABLE console_sink (
    id INT,
    name STRING,
    age INT
) WITH (
    'connector' = 'print'
);

-- 将源表数据插入到输出表
INSERT INTO console_sink
SELECT * FROM mysql_source;

原理说明:​

  1. 创建 MySQL CDC 源表:使用CREATE TABLE语句创建一个名为mysql_source的表,通过WITH子句指定了该表是一个 MySQL CDC 源表,并配置了 MySQL 的连接信息以及要同步的数据库和表 。Flink 会根据这些配置,实时捕获 MySQL 数据库中test.user表的数据变更。
  2. 创建输出表:同样使用CREATE TABLE语句创建一个名为console_sink的输出表,WITH子句中指定connector为print,表示将数据打印到控制台 。
  3. 数据同步:INSERT INTO console_sink SELECT * FROM mysql_source;语句将mysql_source表中的数据插入到console_sink表中,从而实现了从 MySQL 到控制台的数据同步 。Flink 会持续监听mysql_source表的变化,一旦有新的变更数据,就会立即同步到console_sink表并打印出来 。

5.3 数据过滤与处理

在实际应用中,往往需要对捕获到的数据进行过滤和处理,以满足业务需求。在 Flink CDC 中,可以使用 DataStream API 或 Table API 来实现这一功能。​

使用 DataStream API 进行数据过滤,假设只需要同步年龄大于 18 岁的用户数据,可以在前面的 DataStream 示例代码基础上添加过滤操作:

java 复制代码
import com.ververica.cdc.connectors.mysql.source.MySqlSource;
import com.ververica.cdc.debezium.JsonDebeziumDeserializationSchema;
import org.apache.flink.api.common.functions.FilterFunction;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class FlinkCDCDataStreamFilterExample {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);

        MySqlSource<String> source = MySqlSource.<String>builder()
               .hostname("localhost")
               .port(3306)
               .username("root")
               .password("123456")
               .databaseList("test")
               .tableList("test.user")
               .deserializer(new JsonDebeziumDeserializationSchema())
               .build();

        DataStreamSource<String> streamSource = env.addSource(source);

        // 过滤年龄大于18岁的数据
        DataStream<String> filteredStream = streamSource.filter(new FilterFunction<String>() {
            @Override
            public boolean filter(String value) throws Exception {
                // 假设数据是JSON格式,解析出age字段进行判断
                // 这里只是示例,实际需要根据具体的数据格式进行解析
                return value.contains("age\":20") || value.contains("age\":21");
            }
        });

        filteredStream.print();

        env.execute("Flink CDC DataStream Filter Example");
    }
}

使用 Table API 进行数据过滤,在前面的 Flink SQL 示例基础上,修改INSERT INTO语句,添加WHERE条件:

sql 复制代码
-- 将源表中年龄大于18岁的数据插入到输出表
INSERT INTO console_sink
SELECT * FROM mysql_source
WHERE age > 18;

通过上述方法,就可以在 Flink CDC 中对捕获到的数据进行灵活的过滤和处理,满足不同的业务场景需求 。无论是简单的数据过滤,还是复杂的业务逻辑处理,Flink CDC 都能提供强大的支持 。

六、应用场景

Flink CDC 在实际应用中展现出了强大的生命力,广泛应用于多个领域,为企业的数字化转型和业务发展提供了有力支持。​

(1)实时数据同步​

在电商领域,业务数据库与数据仓库之间的数据同步至关重要。使用 Flink CDC 可以实时将 MySQL 数据库中的订单数据、用户数据、商品数据等同步到数据仓库中,确保数据的及时性和一致性 。运营人员可以基于这些实时数据进行销售分析、用户行为分析等,及时调整运营策略,提升业务绩效。在一个大型电商平台中,每天有海量的订单产生,通过 Flink CDC,订单数据能够实时同步到数据仓库,运营人员可以实时监控订单的状态、销售额的变化等,及时发现异常订单并采取相应措施。​

(2)实时分析​

在金融行业,实时监控交易数据的变化对于风险控制和决策制定至关重要。Flink CDC 可以实时捕获交易数据库中的数据变更,如股票交易数据、资金转账数据等 。通过 Flink 的流处理能力,对这些数据进行实时分析,实现实时风险预警、交易异常检测等功能 。在股票交易系统中,Flink CDC 实时捕获股票价格的变化、交易量的增减等数据,通过实时分析,及时发现股价异常波动、大额交易等情况,为投资者提供风险预警。​

(3)数据迁移​

在企业进行数据库迁移或系统升级时,确保数据的完整性和一致性是关键。Flink CDC 可以在不停机的情况下,将源数据库中的数据实时迁移到目标数据库中 。在从 MySQL 数据库迁移到 PostgreSQL 数据库的过程中,Flink CDC 能够实时捕获 MySQL 数据库的变更数据,并同步到 PostgreSQL 数据库,保证迁移过程中数据的持续更新和一致性 ,避免了因停机迁移而导致的业务中断。​

(4)审计和合规​

在医疗行业,对患者医疗数据的变更进行审计和记录,以满足合规性要求是非常重要的。Flink CDC 可以实时捕获医疗数据库中患者数据的变更操作,如病历的修改、诊断结果的更新等 ,并将这些变更记录存储到审计数据库中,以便后续的查询和审计 。这有助于医疗机构满足相关法规要求,保障患者数据的安全和合规使用 。

七、常见问题与解决方案​

在使用 Flink CDC 的过程中,开发者可能会遇到一些常见问题,以下是对这些问题的分析及相应的解决方案。​

(1)性能优化​

在数据量较大时,Flink CDC 的性能可能会受到影响,导致数据处理速度变慢。这可能是由于并行度设置不合理、数据源负载过高、网络传输延迟等原因引起的。​

为提升性能,可合理设置 Flink 作业的并行度,根据集群资源和数据量,调整 Source、Sink 及 Task 的并行度 ,充分利用集群资源,提高数据处理的并发能力 。优化数据源,选择性能较好的数据库引擎和版本,并合理配置数据库参数,如调整缓冲区大小、并发连接数等 。减少网络传输开销,可通过数据本地化处理、优化网络拓扑等方式实现。​

(2)数据一致性​

在分布式环境下,数据一致性是一个关键问题。Flink CDC 虽然通过 Exactly-Once 语义和 Checkpoint 机制来保证数据一致性,但在实际应用中,仍可能出现数据不一致的情况 。例如,在数据同步过程中,若源数据库和目标数据库的事务处理机制存在差异,或者在故障恢复过程中出现异常,都可能导致数据不一致。​

为确保数据一致性,在配置 Flink CDC 时,需充分了解源数据库和目标数据库的事务特性,合理设置相关参数 。在从 MySQL 同步数据到 Kafka 时,要确保 MySQL 的事务隔离级别与 Kafka 的消息处理机制相匹配 。利用 Flink 的状态一致性检查点(Checkpoint)技术,定期保存和恢复作业状态 ,保证在故障恢复时数据的一致性 。对关键业务数据,可进行数据校验和对账操作,及时发现并纠正数据不一致的问题 。​

(3)配置错误​

Flink CDC 的配置较为复杂,若配置参数错误,可能导致作业无法正常运行,如连接数据库失败、无法捕获数据变更等 。例如,在配置 MySQL CDC 连接器时,若主机地址、端口号、用户名或密码等信息填写错误,将无法建立与 MySQL 数据库的连接 。​

在配置 Flink CDC 时,仔细核对各项参数,确保准确无误 。可参考官方文档和示例代码,进行配置参数的设置 。配置完成后,进行充分的测试,验证配置的正确性 。可以使用一些测试工具,如 MySQL 的命令行工具,先验证数据库连接是否正常,再运行 Flink CDC 作业 。

八、总结

Flink CDC 作为 Java 实时数据处理领域的强大工具,以其卓越的实时性、可靠性和多数据库支持能力,为企业解决了诸多数据处理难题。从原理到实战,我们深入了解了它的工作机制和应用方法,通过案例展示了其在不同场景下的高效表现。

希望通过本文的介绍,能激发大家对 Flink CDC 的兴趣,鼓励更多开发者深入学习和应用这一强大的技术,在实时数据处理的领域中探索创新,如果你在学习和使用 Flink CDC 的过程中有任何问题或心得,欢迎在评论区留言分享,让我们一起交流进步!

相关推荐
琼方2 分钟前
“十五五”时期智慧城市赋能全国一体化数据市场建设:战略路径与政策建议[ 注:本建议基于公开政策文件与行业实践研究,数据引用截至2025年6月11日。]
大数据·人工智能·智慧城市
云云32117 分钟前
亚矩阵云手机针对AdMob广告平台怎么进行多账号的广告风控
大数据·网络·线性代数·游戏·智能手机·矩阵
Sui_Network1 小时前
WAYE.ai 为Sui 上 AI 的下一个时代赋能
大数据·前端·人工智能·物联网·游戏
BAOYUCompany1 小时前
暴雨亮相2025中关村论坛数字金融与金融安全大会
大数据·人工智能
火龙谷2 小时前
【hadoop】疫情离线分析案例
大数据·hadoop·分布式
大师兄带你刨AI2 小时前
「AI产业」| 《2025中国低空经济商业洞察报告(商业无人机应用篇)》
大数据·人工智能
孚为智能科技3 小时前
集装箱残损识别系统如何检测残损?它的识别率能达到多少?
大数据·图像处理·人工智能·计算机视觉·视觉检测
weixin_505154465 小时前
数字孪生包含哪些技术和创新?
大数据·人工智能·物联网·数据安全·数字孪生
A达峰绮5 小时前
AI时代的行业重构:机遇、挑战与生存法则
大数据·人工智能·经验分享·ai·推荐算法
摇滚侠5 小时前
elasticSearch是什么,如何使用,有什么用
大数据·elasticsearch·搜索引擎