Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-09-10 GMT+08:00

Criação de uma tarefa de despejo

Função

Essa API é usada para criar uma tarefa de despejo.

Esta API está desatualizada e pode não ser mantida no futuro. Use a API descrita em Ativação do Smart Connect (instância de pagamento por uso).

Método de chamada

Para obter detalhes, consulte Como chamar uma API.

URI

POST /v2/{project_id}/connectors/{connector_id}/sink-tasks

Tabela 1 Parâmetros de URI

Parâmetro

Obrigatório

Tipo

Descrição

project_id

Sim

String

ID do projeto. Para obter detalhes, consulte Obtenção de um ID de projeto.

connector_id

Sim

String

ID de despejo da instância.

Para obter detalhes, consulte Consulta de IDs de instância.

Parâmetros de solicitação

Tabela 2 Parâmetros do corpo da solicitação

Parâmetro

Obrigatório

Tipo

Descrição

source_type

Sim

String

Tipo de dados de origem. Atualmente, apenas BLOB é suportado.

task_name

Sim

String

Nome de uma tarefa de despejo.

destination_type

Sim

String

Tipo de armazenamento. Atualmente, apenas OBS é suportado.

obs_destination_descriptor

Sim

ObsDestinationDescriptor object

Descrição do despejo.

Tabela 3 ObsDestinationDescriptor

Parâmetro

Obrigatório

Tipo

Descrição

topics

Sim

String

Nomes dos tópicos a serem despejados. Vários tópicos podem ser separados por vírgulas (,). Expressões regulares são suportadas.

topics_regex

Não

String

Expressão regular dos tópicos a serem descartados. Defina o parâmetro topics_regex ou o parâmetro topics. Não defina ambos. Não defina como ".*".

consumer_strategy

Sim

String

Deslocamento.

  • latest: as mensagens são consumidas a partir do final do tópico.
  • earliest: as mensagens são consumidas desde o início do tópico.

O valor padrão é latest.

destination_file_type

Sim

String

Formato do arquivo de despejo. Atualmente, apenas arquivos TXT são suportados.

access_key

Sim

String

ID da chave de acesso (AK).

secret_key

Sim

String

Chave de acesso secreta (SK).

obs_bucket_name

Sim

String

Nome do bucket do OBS usado para armazenar os dados.

obs_path

Não

String

Caminho do OBS. Este parâmetro pode ser deixado em branco por padrão.

O valor pode conter no máximo 64 caracteres, incluindo letras, dígitos, sublinhados (_), hifens (-) e barras (/).

Este parâmetro é deixado vazio por padrão.

partition_format

Sim

String

Estrutura de diretório do arquivo de objeto gravado no OBS. A estrutura de diretórios está no formato de yyyy/MM/dd/HH/mm (hora em que a tarefa de despejo foi criada).

  • yyyy: ano.
  • yyyy/MM: ano e mês.
  • yyyy/MM/dd: ano, mês e dia.
  • yyyy/MM/dd/HH: ano, mês, dia e hora.
  • yyyy/MM/dd/HH/mm: ano, mês, dia, hora e minuto. Por exemplo, 2017/11/10/14/49 significa que a estrutura de diretórios é 2017 > 11 > 10 > 14 > 49, onde 2017 é a pasta mais externa.
NOTA:

Depois que os dados são despejados com sucesso, a estrutura do diretório de armazenamento é obs_bucket_path/file_prefix/partition_format. O fuso horário padrão é GMT+08:00.

record_delimiter

Não

String

Delimitador para o arquivo de despejo, que é usado para separar os dados do usuário que são gravados no arquivo de despejo.

Intervalo de valores:

  • Comma (,)
  • Semicolon (;)
  • Vertical bar (|)
  • Newline (\n)
  • NULL

Valor padrão: newline (\n).

deliver_time_interval

Sim

Integer

Nenhum arquivo de pacote será gerado se não houver dados dentro de um segmento de tempo.

Intervalo de valores: 30 a 900

Unidade: segundo.

NOTA:

Esse parâmetro é obrigatório se os dados de streaming forem despejados no OBS.

Parâmetros de resposta

Código de status: 200

Tabela 4 Parâmetro do corpo da resposta

Parâmetro

Tipo

Descrição

task_id

String

ID da tarefa.

Exemplo de solicitação

Criação de uma tarefa de despejo para despejar dados em topic-test para OBS

POST https://{endpoint}/v2/{project_id}/connectors/{connector_id}/sink-tasks

{
  "source_type" : "BLOB",
  "task_name" : "obsTransfer-1122976956",
  "destination_type" : "OBS",
  "obs_destination_descriptor" : {
    "consumer_strategy" : "earliest",
    "destination_file_type" : "TEXT",
    "access_key" : "XXXXXXXXXXXXXXXXXXXX",
    "secret_key" : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "obs_bucket_name" : "6666",
    "obs_path" : "obsTransfer-1122976956",
    "partition_format" : "yyyy/MM/dd/HH/mm",
    "record_delimiter" : "",
    "deliver_time_interval" : 300,
    "topics" : "topic-test"
  }
}

Exemplo de resposta

Código de status: 200

Criação bem-sucedida de uma tarefa de despejo

{
  "task_id" : "2962882a-386c-4c9d-bb59-3b4f55d82961"
}

Código de exemplo do SDK

O código de exemplo do SDK é o seguinte.

Java

Criação de uma tarefa de despejo para despejar dados em topic-test para OBS

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.kafka.v2.region.KafkaRegion;
import com.huaweicloud.sdk.kafka.v2.*;
import com.huaweicloud.sdk.kafka.v2.model.*;


public class CreateSinkTaskSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");

        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);

        KafkaClient client = KafkaClient.newBuilder()
                .withCredential(auth)
                .withRegion(KafkaRegion.valueOf("<YOUR REGION>"))
                .build();
        CreateSinkTaskRequest request = new CreateSinkTaskRequest();
        CreateSinkTaskReq body = new CreateSinkTaskReq();
        ObsDestinationDescriptor obsDestinationDescriptorbody = new ObsDestinationDescriptor();
        obsDestinationDescriptorbody.withTopics("topic-test")
            .withConsumerStrategy(ObsDestinationDescriptor.ConsumerStrategyEnum.fromValue("earliest"))
            .withDestinationFileType(ObsDestinationDescriptor.DestinationFileTypeEnum.fromValue("TEXT"))
            .withAccessKey("XXXXXXXXXXXXXXXXXXXX")
            .withSecretKey("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
            .withObsBucketName("6666")
            .withObsPath("obsTransfer-1122976956")
            .withPartitionFormat(ObsDestinationDescriptor.PartitionFormatEnum.fromValue("yyyy/MM/dd/HH/mm"))
            .withRecordDelimiter("")
            .withDeliverTimeInterval(300);
        body.withObsDestinationDescriptor(obsDestinationDescriptorbody);
        body.withDestinationType(CreateSinkTaskReq.DestinationTypeEnum.fromValue("OBS"));
        body.withTaskName("obsTransfer-1122976956");
        body.withSourceType(CreateSinkTaskReq.SourceTypeEnum.fromValue("BLOB"));
        request.withBody(body);
        try {
            CreateSinkTaskResponse response = client.createSinkTask(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}

Python

Criação de uma tarefa de despejo para despejar dados em topic-test para OBS

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# coding: utf-8

from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkkafka.v2.region.kafka_region import KafkaRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkkafka.v2 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = __import__('os').getenv("CLOUD_SDK_AK")
    sk = __import__('os').getenv("CLOUD_SDK_SK")

    credentials = BasicCredentials(ak, sk) \

    client = KafkaClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(KafkaRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = CreateSinkTaskRequest()
        obsDestinationDescriptorbody = ObsDestinationDescriptor(
            topics="topic-test",
            consumer_strategy="earliest",
            destination_file_type="TEXT",
            access_key="XXXXXXXXXXXXXXXXXXXX",
            secret_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            obs_bucket_name="6666",
            obs_path="obsTransfer-1122976956",
            partition_format="yyyy/MM/dd/HH/mm",
            record_delimiter="",
            deliver_time_interval=300
        )
        request.body = CreateSinkTaskReq(
            obs_destination_descriptor=obsDestinationDescriptorbody,
            destination_type="OBS",
            task_name="obsTransfer-1122976956",
            source_type="BLOB"
        )
        response = client.create_sink_task(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

Go

Criação de uma tarefa de despejo para despejar dados em topic-test para OBS

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    kafka "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/kafka/v2"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/kafka/v2/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/kafka/v2/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        Build()

    client := kafka.NewKafkaClient(
        kafka.KafkaClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.CreateSinkTaskRequest{}
	obsPathObsDestinationDescriptor:= "obsTransfer-1122976956"
	recordDelimiterObsDestinationDescriptor:= ""
	obsDestinationDescriptorbody := &model.ObsDestinationDescriptor{
		Topics: "topic-test",
		ConsumerStrategy: model.GetObsDestinationDescriptorConsumerStrategyEnum().EARLIEST,
		DestinationFileType: model.GetObsDestinationDescriptorDestinationFileTypeEnum().TEXT,
		AccessKey: "XXXXXXXXXXXXXXXXXXXX",
		SecretKey: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
		ObsBucketName: "6666",
		ObsPath: &obsPathObsDestinationDescriptor,
		PartitionFormat: model.GetObsDestinationDescriptorPartitionFormatEnum().YYYY_MM_DD_HH_MM,
		RecordDelimiter: &recordDelimiterObsDestinationDescriptor,
		DeliverTimeInterval: int32(300),
	}
	request.Body = &model.CreateSinkTaskReq{
		ObsDestinationDescriptor: obsDestinationDescriptorbody,
		DestinationType: model.GetCreateSinkTaskReqDestinationTypeEnum().OBS,
		TaskName: "obsTransfer-1122976956",
		SourceType: model.GetCreateSinkTaskReqSourceTypeEnum().BLOB,
	}
	response, err := client.CreateSinkTask(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

Código de status

Código de status

Descrição

200

Uma tarefa de despejo foi criada com sucesso.

Códigos de erro

Consulte Códigos de erro.