Przenoszenie danych przy użyciu łącznika platformy Kafka

Ukończone

Apache Kafka to platforma typu open source używana do przesyłania strumieniowego zdarzeń w sposób rozproszony. Wiele firm korzysta z platformy Kafka na potrzeby scenariuszy integracji danych o wysokiej wydajności na dużą skalę. Kafka Connect to narzędzie w swoim pakiecie służące do przesyłania strumieniowego danych między platformą Kafka a innymi systemami danych. Co zrozumiałe, może to obejmować usługę Azure Cosmos DB jako źródło danych lub docelowy (ujście) danych.

Ustawienia

Łączniki platformy Kafka Connect dla usługi Azure Cosmos DB są dostępne jako projekt open source w usłudze GitHub w witrynie microsoft/kafka-connect-cosmosdb. Instrukcje dotyczące ręcznego pobierania i instalowania pliku JAR są dostępne w repozytorium.

Konfigurowanie

Należy ustawić cztery właściwości konfiguracji, aby prawidłowo skonfigurować łączność z kontem usługi Azure Cosmos DB for NoSQL.

Właściwości Wartość
connect.cosmos.connection.endpoint Identyfikator URI punktu końcowego konta
connect.cosmos.master.key Klucz konta
connect.cosmos.databasename Nazwa zasobu bazy danych
connect.cosmos.containers.topicmap Przy użyciu formatu CSV mapowanie tematów platformy Kafka na kontenery

Tematy do mapowania kontenerów

Każdy kontener powinien być mapowany na temat. Załóżmy na przykład, że chcesz, aby kontener products został zamapowany na temat prodlistener i kontener customers do tematu custlistener. W takim przypadku należy użyć następującego ciągu mapowania CSV: prodlistener#products,custlistener#customers.

Zapisywanie w usłudze Azure Cosmos DB

Napiszmy dane do usługi Azure Cosmos DB, tworząc temat. Na platformie Apache Kafka wszystkie komunikaty są wysyłane za pośrednictwem tematów.

Nowy temat można utworzyć przy użyciu polecenia kafka-topics . Ten przykład spowoduje utworzenie nowego tematu o nazwie prodlistener.

kafka-topics --create \
    --zookeeper localhost:2181 \
    --topic prodlistener \
    --replication-factor 1 \
    --partitions 1

Następujące polecenie uruchomi producenta, aby można było zapisać trzy rekordy w temacie prodlistener.

kafka-console-producer \
    --broker-list localhost:9092 \
    --topic prodlistener

W konsoli programu można następnie wprowadzić te trzy rekordy do tematu. Po wykonaniu tej czynności te rekordy zostaną zatwierdzone w kontenerze usługi Azure Cosmos DB for NoSQL zamapowanym na temat (produkty).

{"id": "0ac8b014-c3f4-4db0-8a1f-434bab460938", "name": "handlebar", "categoryId": "78148556-4e84-44be-abae-9755dde9c9e3"}
{"id": "54ba00da-50cf-44d8-b122-1d18bd1db400", "name": "handlebar", "categoryId": "eb642a5e-0c6f-4c83-b96b-bb2903b85e59"}
{"id": "381dde84-e6c2-4583-b66c-e4a4116f7d6e", "name": "handlebar", "categoryId": "cf8ae707-6d74-4563-831a-06e15a70a0dc"}

Odczyt z usługi Azure Cosmos DB

Łącznik źródłowy można utworzyć na platformie Kafka Connect przy użyciu obiektu konfiguracji JSON. W poniższej przykładowej konfiguracji większość właściwości powinna pozostać bez zmian, ale pamiętaj, aby zmienić następujące wartości:

Właściwości Opis
connect.cosmos.connection.endpoint Identyfikator URI rzeczywistego punktu końcowego konta
connect.cosmos.master.key Rzeczywisty klucz konta
connect.cosmos.databasename Nazwa rzeczywistego zasobu bazy danych konta
connect.cosmos.containers.topicmap Przy użyciu formatu CSV mapowanie rzeczywistych tematów platformy Kafka na kontenery
{
  "name": "cosmosdb-source-connector",
  "config": {
    "connector.class": "com.azure.cosmos.kafka.connect.source.CosmosDBSourceConnector",
    "tasks.max": "1",
    "key.converter": "org.apache.kafka.connect.json.JsonConverter",
    "value.converter": "org.apache.kafka.connect.json.JsonConverter",
    "connect.cosmos.task.poll.interval": "100",
    "connect.cosmos.connection.endpoint": "<cosmos-endpoint>",
    "connect.cosmos.master.key": "<cosmos-key>",
    "connect.cosmos.databasename": "<cosmos-database>",
    "connect.cosmos.containers.topicmap": "<kafka-topic>#<cosmos-container>",
    "connect.cosmos.offset.useLatest": false,
    "value.converter.schemas.enable": "false",
    "key.converter.schemas.enable": "false"
  }
}

Przykładem ilustracyjnym jest użycie tej przykładowej tabeli konfiguracji:

Właściwości Opis
connect.cosmos.connection.endpoint https://dp420.documents.azure.com:443/
connect.cosmos.master.key C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==
connect.cosmos.databasename cosmicworks
connect.cosmos.containers.topicmap prodlistener#products

Oto przykładowy plik konfiguracji:

{
  "name": "cosmosdb-source-connector",
  "config": {
    "connector.class": "com.azure.cosmos.kafka.connect.source.CosmosDBSourceConnector",
    "tasks.max": "1",
    "key.converter": "org.apache.kafka.connect.json.JsonConverter",
    "value.converter": "org.apache.kafka.connect.json.JsonConverter",
    "connect.cosmos.task.poll.interval": "100",
    "connect.cosmos.connection.endpoint": "https://dp420.documents.azure.com:443/",
    "connect.cosmos.master.key": "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
    "connect.cosmos.databasename": "cosmicworks",
    "connect.cosmos.containers.topicmap": "prodlistener#products",
    "connect.cosmos.offset.useLatest": false,
    "value.converter.schemas.enable": "false",
    "key.converter.schemas.enable": "false"
  }
}

Po skonfigurowaniu dane ze źródła zmian usługi Azure Cosmos DB zostaną opublikowane w temacie platformy Kafka.