当您需要将数据从云消息队列 Kafka 版实例的数据源Topic导出至阿里云Elasticsearch的索引,您可以通过Elasticsearch Sink Connector实现。本文介绍如何创建Elasticsearch Sink Connector。
前提条件
在导出数据前,请确保您已完成以下操作:- 云消息队列 Kafka 版
- 为云消息队列 Kafka 版实例开启Connector。更多信息,请参见开启Connector。
- 为云消息队列 Kafka 版实例创建数据源Topic。更多信息,请参见步骤一:创建Topic。
- 函数计算
- Elasticsearch
- 在Elasticsearch管理控制台创建实例和索引。更多信息,请参见初级版:从实例创建到数据检索。
- 在Elasticsearch白名单配置中添加了函数计算服务地址所在的网段。更多信息,请参见配置实例公网或私网访问白名单。
说明- 函数计算使用的Elasticsearch客户端版本为7.7.0,为保持兼容,您需创建7.0或以上版本的Elasticsearch实例。
- 配置白名单时,您可以设置网段为0.0.0.0/0,代表整个VPC可访问,访问成功后根据需要修改为对应的网段。
注意事项
- 仅支持在同地域内,将数据从云消息队列 Kafka 版实例的数据源Topic导出至函数计算,再由函数计算导出至Elasticsearch。关于Connector的限制说明,请参见使用限制。
- 该功能基于函数计算服务提供。函数计算为您提供了一定的免费额度,超额部分将产生费用,请以函数计算的计费规则为准。计费详情,请参见计费概述。
- 函数计算的函数调用支持日志查询,以便您迅速排查问题。具体操作步骤,请参见配置日志。
- 消息转储时,云消息队列 Kafka 版中消息用UTF-8 String序列化,暂不支持二进制的数据格式。
- 如果Elasticsearch Sink Connector接入点是私网接入点,函数计算运行环境默认无法访问,为确保网络畅通,需在函数计算控制台为函数服务配置与Elasticsearch一致的VPC和vSwitch信息。更多信息,请参见更新服务。
创建并部署Elasticsearch Sink Connector
在概览页面的资源分布区域,选择地域。
在左侧导航栏,单击Connector 任务列表。
在Connector 任务列表页面,从选择实例的下拉列表选择Connector所属的实例,然后单击创建 Connector。
- 在创建 Connector配置向导页面,完成以下操作。
- 在配置基本信息页签,按需配置以下参数,然后单击下一步。重要 云消息队列 Kafka 版会为您自动选中授权创建服务关联角色。
- 如果未创建服务关联角色,云消息队列 Kafka 版会为您自动创建一个服务关联角色,以便您使用云消息队列 Kafka 版导出数据至Elasticsearch的功能。
- 如果已创建服务关联角色,云消息队列 Kafka 版不会重复创建。
参数 描述 示例值 名称 Connector的名称。命名规则: - 可以包含数字、小写英文字母和短划线(-),但不能以短划线(-)开头,长度限制为48个字符。
- 同一个云消息队列 Kafka 版实例内保持唯一。
Connector的数据同步任务必须使用名称为connect-任务名称的Group。如果您未手动创建该Group,系统将为您自动创建。
kafka-elasticsearch-sink 实例 默认配置为实例的名称与实例ID。 demo alikafka_post-cn-st21p8vj**** - 在配置源服务页签,选择数据源为消息队列Kafka版,并配置以下参数,然后单击下一步。
参数 描述 示例值 数据源 Topic 需要同步数据的Topic。 elasticsearch-test-input 消费线程并发数 数据源Topic的消费线程并发数。默认值为6。取值说明如下: - 1
- 2
- 3
- 6
- 12
6 消费初始位置 开始消费的位置。取值说明如下: - 最早位点:从最初位点开始消费。
- 最近位点:从最新位点开始消费。
最早位点 VPC ID 数据同步任务所在的VPC。单击配置运行环境显示该参数。默认为云消息队列 Kafka 版实例所在的VPC,您无需填写。 vpc-bp1xpdnd3l*** vSwitch ID 数据同步任务所在的交换机。单击配置运行环境显示该参数。该交换机必须与云消息队列 Kafka 版实例处于同一VPC。默认为部署云消息队列 Kafka 版实例时填写的交换机。 vsw-bp1d2jgg81*** 失败处理 消息发送失败后,是否继续订阅出现错误的Topic的分区。单击配置运行环境显示该参数。取值说明如下: - 继续订阅:继续订阅出现错误的Topic的分区,并打印错误日志。
- 停止订阅:停止订阅出现错误的Topic的分区,并打印错误日志。
说明- 如何查看日志,请参见Connector相关操作。
- 如何根据错误码查找解决方案,请参见错误码。
继续订阅 创建资源方式 选择创建Connector所依赖的Topic与Group的方式。单击配置运行环境显示该参数。 - 自动创建
- 手动创建
自动创建 Connector 消费组 Connector的数据同步任务使用的Group。单击配置运行环境显示该参数。该Group的名称必须为connect-任务名称。 connect-kafka-elasticsearch-sink 任务位点 Topic 用于存储消费位点的Topic。单击配置运行环境显示该参数。 - Topic:建议以connect-offset开头。
- 分区数:Topic的分区数量必须大于1。
- 存储引擎:Topic的存储引擎必须为Local存储。说明 仅专业版实例支持在创建Topic时选择存储引擎类型为Local存储,标准版暂不支持。
- cleanup.policy:Topic的日志清理策略必须为compact。
connect-offset-kafka-elasticsearch-sink 任务配置 Topic 用于存储任务配置的Topic。单击配置运行环境显示该参数。 - Topic:建议以connect-config开头。
- 分区数:Topic的分区数量必须为1。
- 存储引擎:Topic的存储引擎必须为Local存储。说明 仅专业版实例支持在创建Topic时选择存储引擎类型为Local存储,标准版暂不支持。
- cleanup.policy:Topic的日志清理策略必须为compact。
connect-config-kafka-elasticsearch-sink 任务状态 Topic 用于存储任务状态的Topic。单击配置运行环境显示该参数。 - Topic:建议以connect-status开头。
- 分区数:Topic的分区数量建议为6。
- 存储引擎:Topic的存储引擎必须为Local存储。说明 仅专业版实例支持在创建Topic时选择存储引擎类型为Local存储,标准版暂不支持。
- cleanup.policy:Topic的日志清理策略必须为compact。
connect-status-kafka-elasticsearch-sink 死信队列 Topic 用于存储Connect框架的异常数据的Topic。单击配置运行环境显示该参数。该Topic可以和异常数据Topic为同一个Topic,以节省Topic资源。 - Topic:建议以connect-error开头。
- 分区数:Topic的分区数量建议为6。
- 存储引擎:Topic的存储引擎可以为Local存储或云存储。说明 仅专业版实例支持在创建Topic时选择存储引擎类型为Local存储,标准版暂不支持。
connect-error-kafka-elasticsearch-sink 异常数据 Topic 用于存储Sink的异常数据的Topic。单击配置运行环境显示该参数。该Topic可以和死信队列Topic为同一个Topic,以节省Topic资源。 - Topic:建议以connect-error开头。
- 分区数:Topic的分区数量建议为6。
- 存储引擎:Topic的存储引擎可以为Local存储或云存储。说明 仅专业版实例支持在创建Topic时选择存储引擎类型为Local存储,标准版暂不支持。
connect-error-kafka-elasticsearch-sink - 在配置目标服务页签,选择目标服务为Elasticsearch,并配置以下参数,然后单击创建。
参数 描述 示例值 ES 实例 ID 阿里云Elasticsearch实例ID。 es-cn-oew1o67x0000**** 接入地址 阿里云Elasticsearch实例的公网或私网地址。更多信息,请参见查看实例基本信息。 es-cn-oew1o67x0000****.elasticsearch.aliyuncs.com 接入端口 访问阿里云Elasticsearch的公网或私网端口,取值如下: - 9200:基于HTTP或HTTPS。
- 9300:基于TCP。
更多信息,请参见查看实例基本信息。
9300 用户名 登录Kibana控制台的用户名,默认为elastic。您也可以创建自定义用户。具体操作,请参见通过Elasticsearch X-Pack角色管理实现用户权限管控。 elastic 用户密码 登录Kibana控制台的密码。elastic用户的密码在创建实例时设定,如果忘记可重置。具体操作,请参见重置实例访问密码。 ******** 索引 阿里云Elasticsearch的索引名称。 elastic_test 说明- 用户名和用户密码会被用来初始化Elasticsearch对象,通过bulk投递消息,请确认账号对索引有写权限。
- 用户名和用户密码是云消息队列 Kafka 版创建任务时作为环境变量传递至函数计算的函数,任务创建成功后,云消息队列 Kafka 版不保存相关信息。
创建完成后,在Connector 任务列表页面,查看创建的Connector 。
- 在配置基本信息页签,按需配置以下参数,然后单击下一步。
- 创建完成后,在Connector 任务列表页面,找到创建的Connector ,单击其操作列的部署。
配置函数服务
您在云消息队列 Kafka 版控制台成功创建并部署Elasticsearch Sink Connector后,函数计算会自动为您创建给该Connector使用的函数服务,服务命名格式为kafka-service-<connector_name>-<随机String>。
- 在Connector 任务列表页面,找到目标Connector,在其右侧操作列,选择。页面跳转至函数计算控制台。
- 在函数计算控制台,找到自动创建的函数服务,并配置其VPC和交换机信息。请确保该信息和您阿里云Elasticsearch相同。配置的具体步骤,请参见更新服务。
发送测试消息
您可以向云消息队列 Kafka 版的数据源Topic发送消息,测试数据能否被导出至阿里云Elasticsearch。
在Connector 任务列表页面,找到目标Connector,在其右侧操作列,单击测试。
在发送消息面板,发送测试消息。
发送方式选择控制台。
在消息 Key文本框中输入消息的Key值,例如demo。
在消息内容文本框输入测试的消息内容,例如 {"key": "test"}。
设置发送到指定分区,选择是否指定分区。
单击是,在分区 ID文本框中输入分区的ID,例如0。如果您需查询分区的ID,请参见查看分区状态。
单击否,不指定分区。
发送方式选择Docker,执行运行 Docker 容器生产示例消息区域的Docker命令,发送消息。
发送方式选择SDK,根据您的业务需求,选择需要的语言或者框架的SDK以及接入方式,通过SDK发送消息。
验证结果
向云消息队列 Kafka 版的数据源Topic发送消息后,登录Kibana控制台,执行GET /<index_name>/_search查看索引,验证数据导出结果。
{
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "product_****",
"_type" : "_doc",
"_id" : "TX3TZHgBfHNEDGoZ****",
"_score" : 1.0,
"_source" : {
"msg_body" : {
"key" : "test",
"offset" : 2,
"overflowFlag" : false,
"partition" : 2,
"timestamp" : 1616599282417,
"topic" : "dv****",
"value" : "test1",
"valueSize" : 8
},
"doc_as_upsert" : true
}
}
]
}
}