跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

Kafka 连接器指南

Kafka 连接器是用于从 Kafka 主题提取数据,并将其传输到悦数图数据库开发版的接收连接器。本文介绍如何设置 Kafka 连接器以实现从 Kafka 到悦数图数据库开发版的数据接收。

前提条件

步骤 1. 在悦数图数据库开发版中创建图

在从 Kafka 接收数据之前,需要在悦数图数据库开发版中创建一个用于存储数据的图。

在悦数图数据库开发版中,图是基于图类型创建的。图类型定义了图的数据结构。为确保数据正确接收,图类型必须与源数据的数据结构匹配。

本文使用电影数据集作为示例,需要您在悦数图数据库开发版中创建一个名为movie_type的图类型和一个名为movie的图,如下所示:

'''
// 创建名为`movie_type`的图类型
CREATE GRAPH TYPE IF NOT EXISTS movie_type AS { 
    NODE Actor (LABEL Person {id INT64, name STRING, birthDate DATE, PRIMARY KEY (id)}) , 
    NODE Director (LABEL Person {id INT64, name STRING, birthDate DATE, PRIMARY KEY (id)}), 
    NODE `User` (LABEL Person {id INT64 PRIMARY KEY}), 
    NODE Movie (LABEL Movie {id INT64 PRIMARY KEY, name STRING}), 
    NODE Genre (LABEL Genre {id INT64 PRIMARY KEY, name STRING}), 
    EDGE Act (Actor)-[:Act]->(Movie), 
    EDGE Direct (Director)-[:Direct]->(Movie), 
    EDGE Watch (`User`)-[:Watch {rate FLOAT}]->(Movie), 
    EDGE WithGenre (Movie)-[:WithGenre]->(Genre) 
    }
'''

'''
// 基于图类型创建图
CREATE GRAPH IF NOT EXISTS movie TYPED movie_type
'''

关于图类型和图的更多信息,请参见 CREATE GRAPH TYPE 和 CREATE GRAPH。

步骤 2. 安装 Kafka 连接器

将 Kafka 连接器安装包解压缩为 JAR 包文件,并将 JAR 包文件放置到 Kafka 环境的目录KAFKA_HOME/libs中。

步骤 3. 准备配置文件

配置文件必须为properties格式,并包含以下信息:

  • 悦数图数据库开发版服务组内 Graph 服务的连接信息。
  • 从中提取数据的 Kafka 主题。
  • Kafka 主题中的字段与图元素的属性之间的映射关系。

为了方便快速设置配置文件,您可以点击此处下载电影数据集的示例配置文件。以下connect-nebula-sink_actor.properties文件是示例配置文件之一,用于从 Kafka 主题actor接收数据到图movie中的点类型Actor:

将<current-password>替换为登录账号的当前密码。若已修改密码,请使用修改后的密码。

name=local-nebula-sink
connector.class=com.vesoft.nebula.connector.sink.NebulaSinkConnector
tasks.max=1
topics=actor

nebula.graph.servers=127.0.0.1:9669
nebula.user=root
nebula.passwd=<current-password>
nebula.graph.name=movie
nebula.data.type=NODE
nebula.node.typeName=Actor
nebula.node.primaryKeys=id
kafka.node.primaryKeys=people_id
nebula.node.property.names=id,name,birthDate
kafka.node.property.names=people_id,name,birth_date
nebula.batchSize=50
nebula.sink.mode=INSERTREPLACE

nebula.request.timeout=5000
nebula.sin.partitions=10

key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=false
value.converter.schemas.enable=false

请确保将以下参数替换为实际值:

  • nebula.graph.servers:悦数图数据库开发版服务组中 Graph 服务的 IP 地址和端口号。
  • nebula.user:连接 Graph 服务的用户名。
  • nebula.passwd:登录账号的当前密码。若已修改密码,请使用修改后的密码。

有关配置参数的更多信息,请参见 Kafka 连接器配置。

步骤 4. 向 Kafka 主题生产数据

在向 Kafka 主题生产数据时,请确保用于生产数据的 JSON 文件中的字段与配置文件中定义的映射关系相匹配。

以下脚本演示了如何创建 Kafka 主题并将电影数据从 JSON 文件生产到这些主题中:

#!/bin/sh

# 创建 Kafka 主题
${KAFKA_HOME}/bin/kafka-topics.sh --create --topic actor --broker-list "127.0.0.1:9092" --replication-factor 1 --partitions 1
${KAFKA_HOME}/bin/kafka-topics.sh --create --topic director --broker-list "127.0.0.1:9092" --replication-factor 1 --partitions 1
${KAFKA_HOME}/bin/kafka-topics.sh --create --topic genre --broker-list "127.0.0.1:9092" --replication-factor 1 --partitions 1
${KAFKA_HOME}/bin/kafka-topics.sh --create --topic movie --broker-list "127.0.0.1:9092" --replication-factor 1 --partitions 1
${KAFKA_HOME}/bin/kafka-topics.sh --create --topic user --broker-list "127.0.0.1:9092" --replication-factor 1 --partitions 1
${KAFKA_HOME}/bin/kafka-topics.sh --create --topic act --broker-list "127.0.0.1:9092" --replication-factor 1 --partitions 1
${KAFKA_HOME}/bin/kafka-topics.sh --create --topic direct --broker-list "127.0.0.1:9092" --replication-factor 1 --partitions 1
${KAFKA_HOME}/bin/kafka-topics.sh --create --topic withGenre --broker-list "127.0.0.1:9092" --replication-factor 1 --partitions 1
${KAFKA_HOME}/bin/kafka-topics.sh --create --topic watched --broker-list "127.0.0.1:9092" --replication-factor 1 --partitions 1

# 将电影数据生产到 Kafka 主题中
cat movie_data/actor.json | ${KAFKA_HOME}/bin/kafka-console-producer.sh --broker-list "127.0.0.1:9092" --topic actor
cat movie_data/director.json | ${KAFKA_HOME}/bin/kafka-console-producer.sh --broker-list "127.0.0.1:9092" --topic director
cat movie_data/genre.json | ${KAFKA_HOME}/bin/kafka-console-producer.sh --broker-list "127.0.0.1:9092" --topic genre
cat movie_data/movie.json | ${KAFKA_HOME}/bin/kafka-console-producer.sh --broker-list "127.0.0.1:9092" --topic movie
cat movie_data/user.json | ${KAFKA_HOME}/bin/kafka-console-producer.sh --broker-list "127.0.0.1:9092" --topic user
cat movie_data/actor_act_movie.json | ${KAFKA_HOME}/bin/kafka-console-producer.sh --broker-list "127.0.0.1:9092" --topic act
cat movie_data/director_direct_movie.json | ${KAFKA_HOME}/bin/kafka-console-producer.sh --broker-list "127.0.0.1:9092" --topic direct
cat movie_data/movie_withgenre_genre.json | ${KAFKA_HOME}/bin/kafka-console-producer.sh --broker-list "127.0.0.1:9092" --topic withgenre
cat movie_data/user_watched_movies.json | ${KAFKA_HOME}/bin/kafka-console-producer.sh --broker-list "127.0.0.1:9092" --topic watched

您可以点击此处下载上述脚本中使用的 JSON 文件。

除了 JSON,也支持将其他数据结构的数据(如 Struct 和 Map)生产到 Kafka 主题中。

步骤 5. 从 Kafka 主题接收数据到悦数图数据库开发版

将步骤 3 中准备的配置文件放置到目录${KAFKA_HOME}/config中,再运行以下命令将电影数据从 Kafka 主题接收至悦数图数据库开发版:

${KAFKA_HOME}/bin/connect-standalone.sh ${KAFKA_HOME}/config/standalone.properties ${KAFKA_HOME}/config/connect-nebula-sink_actor.properties
${KAFKA_HOME}/bin/connect-standalone.sh ${KAFKA_HOME}/config/standalone.properties ${KAFKA_HOME}/config/connect-nebula-sink_director.properties
${KAFKA_HOME}/bin/connect-standalone.sh ${KAFKA_HOME}/config/standalone.properties ${KAFKA_HOME}/config/connect-nebula-sink_user.properties
${KAFKA_HOME}/bin/connect-standalone.sh ${KAFKA_HOME}/config/standalone.properties ${KAFKA_HOME}/config/connect-nebula-sink_movie.properties
${KAFKA_HOME}/bin/connect-standalone.sh ${KAFKA_HOME}/config/standalone.properties ${KAFKA_HOME}/config/connect-nebula-sink_genre.properties
${KAFKA_HOME}/bin/connect-standalone.sh ${KAFKA_HOME}/config/standalone.properties ${KAFKA_HOME}/config/connect-nebula-sink_act.properties
${KAFKA_HOME}/bin/connect-standalone.sh ${KAFKA_HOME}/config/standalone.properties ${KAFKA_HOME}/config/connect-nebula-sink_direct.properties
${KAFKA_HOME}/bin/connect-standalone.sh ${KAFKA_HOME}/config/standalone.properties ${KAFKA_HOME}/config/connect-nebula-sink_watched.properties
${KAFKA_HOME}/bin/connect-standalone.sh ${KAFKA_HOME}/config/standalone.properties ${KAFKA_HOME}/config/connect-nebula-sink_withgenre.properties

步骤 6. 验证悦数图数据库开发版中的数据

要验证数据是否成功从 Kafka 主题接收至悦数图数据库开发版,可以连接到悦数图数据库开发版服务组并依次执行以下语句:

  1. 提交一个作业以生成图movie的统计信息。

    SUBMIT JOB STATS movie
    

    返回:

    +--------+
    | job_id |
    +--------+
    | 1      |
    +--------+
    
  2. 显示图movie的统计信息。

    USE movie SHOW STATS
    

    如果数据成功接收,将看到类似以下的返回:

    +------------+--------------+-----------+
    | entry_name | element_type | total_num |
    +------------+--------------+-----------+
    | Edge Total | Edge         | 10175     |
    | Node Total | Node         | 4589      |
    | Act        | Edge         | 3732      |
    | Direct     | Edge         | 249       |
    | Watch      | Edge         | 3910      |
    | WithGenre  | Edge         | 2284      |
    | Actor      | Node         | 3312      |
    | Director   | Node         | 183       |
    | User       | Node         | 569       |
    | Movie      | Node         | 245       |
    | Genre      | Node         | 280       |
    +------------+--------------+-----------+
    

更多信息