ApsaraDB for SelectDB verileri Kafka'dan otomatik olarak abone olup senkronize etmek için Doris Kafka Connector kullanımını destekler. Bu konuda, Doris Kafka Connector kullanılarak verilerin ApsaraDB for SelectDB ile nasıl senkronize edileceği açıklanmaktadır.
Arka plan bilgileri
Kafka Connect, Apache Kafka ile diğer sistemler arasında güvenilir bir şekilde veri akışı sağlayan bir araçtır. Büyük veri kümelerini Kafka'ya taşımak veya Kafka'dan dışarı çıkarmak için konnektörler tanımlayabilirsiniz.
Doris topluluğu tarafından sağlanan Kafka konnektörü, bir Kafka Connect kümesinde çalışır. Bir Kafka konusundan veri okur ve bu veriyi ApsaraDB for SelectDB üzerine yazar.
İş senaryolarında kullanıcılar genellikle Debezium Connector'ü kullanarak veritabanı değişiklik verilerini Kafka'ya gönderir veya gerçek zamanlı olarak JSON formatlı verileri Kafka'ya yazmak için bir API çağrısı yapar. Doris Kafka Connector, Kafka'daki verilere otomatik olarak abone olur ve bu verileri ApsaraDB for SelectDB ile senkronize eder.
Kafka Connect çalışma modları
Kafka Connect iki farklı çalışma moduna sahiptir.
Tekil mod
Tekil modun üretim ortamlarında kullanılması önerilmez.
Tekil yapılandırma
connect-standalone.properties dosyasını yapılandırın.
# Modify the broker address
bootstrap.servers=127.0.0.1:9092
Kafka config dizininde bir connect-selectdb-sink.properties dosyası oluşturun ve aşağıdaki içeriği ekleyin:
name=test-selectdb-sink
connector.class=org.apache.doris.kafka.connector.DorisSinkConnector
topics=topic_test
doris.topic2table.map=topic_test:test_kafka_tbl
buffer.count.records=10000
buffer.flush.time=120
buffer.size.bytes=5000000
doris.urls=selectdb-cn-4xl3jv1****-public.selectdbfe.rds.aliyuncs.com
doris.http.port=8030
doris.query.port=9030
doris.user=admin
doris.password=****
doris.database=test_db
key.converter=org.apache.kafka.connect.storage.StringConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
Tekil modda başlatma
$KAFKA_HOME/bin/connect-standalone.sh -daemon $KAFKA_HOME/config/connect-standalone.properties $KAFKA_HOME/config/connect-selectdb-sink.properties
Dağıtık mod
Dağıtık yapılandırma
connect-distributed.properties dosyasını yapılandırın.
# Modify the broker address
bootstrap.servers=127.0.0.1:9092
# Modify group.id. The ID must be the same for all workers in the same cluster.
group.id=connect-cluster
Dağıtık modda başlatma
$KAFKA_HOME/bin/connect-distributed.sh -daemon $KAFKA_HOME/config/connect-distributed.properties
Konnektör ekleme
curl -i http://127.0.0.1:8083/connectors -H "Content-Type: application/json" -X POST -d '{
"name":"test-selectdb-sink-cluster",
"config":{
"connector.class":"org.apache.doris.kafka.connector.DorisSinkConnector",
"topics":"topic_test",
"doris.topic2table.map": "topic_test:test_kafka_tbl",
"buffer.count.records":"10000",
"buffer.flush.time":"120",
"buffer.size.bytes":"5000000",
"doris.urls":"selectdb-cn-4xl3jv1****-public.selectdbfe.rds.aliyuncs.com",
"doris.user":"admin",
"doris.password":"***",
"doris.database":"test_db",
"doris.http.port":"8030",
"doris.query.port":"9030",
"key.converter":"org.apache.kafka.connect.storage.StringConverter",
"value.converter":"org.apache.kafka.connect.json.JsonConverter"
}
}'
Parametreler
Parameter | Description |
name | Konnektörün adı. ISO kontrol karakterleri içermeyen bir dize olmalı ve Kafka Connect ortamı içinde benzersiz olmalıdır. |
connector.class | Konnektörün sınıf adı veya takma adı. Bu değeri |
topics | Kaynak konularının virgülle ayrılmış listesi. |
doris.topic2table.map | Konular ve tablolar arasındaki eşleme. Birden fazla eşlemeyi virgül (,) ile ayırın. Örnek: |
buffer.count.records | ApsaraDB for SelectDB üzerine yazılmadan önce her Kafka bölümü için bellekte arabelleğe alınan kayıt sayısı. Varsayılan değer 10.000 kayıttır. |
buffer.flush.time | Bellek içi arabelleğin saniye cinsinden boşaltma aralığı. Varsayılan değer 120'dir. |
buffer.size.bytes | Her Kafka bölümü için bellekte arabelleğe alınacak kayıtların bayt cinsinden kümülatif boyutu. Varsayılan değer 5.000.000'dir. |
doris.urls | ApsaraDB for SelectDB bağlantı uç noktası. İlgili parametreleri ApsaraDB for SelectDB konsolundaki Instance Details > Network Information sayfasından alabilirsiniz. Örnek: selectdb-cn-4xl3jv1****-public.selectdbfe.rds.aliyuncs.com |
doris.http.port | ApsaraDB for SelectDB için varsayılan HTTP bağlantı noktası 8080'dir. |
doris.query.port | ApsaraDB for SelectDB MySQL protokolü bağlantı noktası varsayılan olarak 9030'dur. |
doris.user | ApsaraDB for SelectDB kullanıcı adı. |
doris.password | ApsaraDB for SelectDB parolası. |
doris.database | Verilerin yazılacağı ApsaraDB for SelectDB veritabanı. |
key.converter | Anahtar için JSON dönüştürücü sınıfı. |
value.converter | Değer için JSON dönüştürücü sınıfı. |
jmx | JMX aracılığıyla dahili konnektör ölçümlerinin alınıp alınmayacağını belirtir. Daha fazla bilgi için bkz. Doris-Connector-JMX. Varsayılan değer true'dur. |
enable.delete | Silme işlemlerinin senkronize edilip edilmeyeceğini belirtir. Varsayılan değer false'tur. |
label.prefix | Stream Load kullanılarak aktarılan veriler için etiket ön eki. Varsayılan değer konnektör uygulama adıdır. |
auto.redirect | Etkinleştirildiğinde konnektör, Stream Load isteklerini frontend (FE) üzerinden hedef backend'e (BE) yönlendirir; bu da BE bilgisini almaya gerek kalmamasını sağlar. |
load.model | Veri aktarma yöntemi. Aşağıdaki yöntemler desteklenir:
Varsayılan değer |
sink.properties.* | Stream Load için aktarma parametreleri. Örnek: Bir sütun ayırıcısı belirtmek için Daha fazla bilgi için bkz. Stream Load. |
delivery.guarantee | Kafka verilerini tüketirken ve ApsaraDB for SelectDB üzerine aktarırken veri tutarlılığı garantisini belirtir. Desteklenen seviyeler Şu anda ApsaraDB for SelectDB, yalnızca copy into kullanılarak aktarılan veriler için |
enable.2pc | Tam olarak bir kez semantiğini sağlamak için iki aşamalı taahhüdün etkinleştirilip etkinştirilmeyeceğini belirtir. |
Diğer yaygın Kafka Connect sink yapılandırmaları için Configuring Connectors sayfasına bakın.
Örnekler
Önkoşullar
-
Apache Kafka kümesi veya Confluent Cloud'u sürüm 2.4.0 veya üzeri olacak şekilde yükleyin. Bu örnekte tek düğümlü bir Kafka ortamı kullanılmaktadır.
# Download and decompress the package wget https://archive.apache.org/dist/kafka/2.4.0/kafka_2.12-2.4.0.tgz tar -zxvf kafka_2.12-2.4.0.tgz cd kafka_2.12-2.4.0/ bin/zookeeper-server-start.sh -daemon config/zookeeper.properties bin/kafka-server-start.sh -daemon config/server.properties doris-kafka-connector-1.0.0.jar indirin ve JAR dosyasını KAFKA_HOME/libs dizinine yerleştirin.
Bir ApsaraDB for SelectDB örneği oluşturun. Daha fazla bilgi için bkz. Örnek oluşturma.
Bir ApsaraDB for SelectDB örneğine MySQL protokolünü kullanarak bağlanın. Daha fazla bilgi için bkz. Örneğe bağlanma.
-
Bir test veritabanı ve bir test tablosu oluşturun.
-
Bir test veritabanı oluşturun.
CREATE DATABASE test_db; -
Bir test tablosu oluşturun.
USE test_db; CREATE TABLE employees ( emp_no int NOT NULL, birth_date date, first_name varchar(20), last_name varchar(20), gender char(2), hire_date date ) UNIQUE KEY(`emp_no`) DISTRIBUTED BY HASH(`emp_no`) BUCKETS 1;
-
Örnek 1: JSON verilerini senkronize etme
-
SelectDB sink'i yapılandırma
Tekil modu örnek alarak Kafka config dizininde bir selectdb-sink.properties dosyası oluşturun ve aşağıdaki içeriği ekleyin:
name=selectdb_sink connector.class=org.apache.doris.kafka.connector.DorisSinkConnector topics=test_topic doris.topic2table.map=test_topic:example_tbl buffer.count.records=10000 buffer.flush.time=120 buffer.size.bytes=5000000 doris.urls=selectdb-cn-4xl3jv1****-public.selectdbfe.rds.aliyuncs.com doris.http.port=8030 doris.query.port=9030 doris.user=admin doris.password=*** doris.database=test_db key.converter=org.apache.kafka.connect.storage.StringConverter value.converter=org.apache.kafka.connect.json.JsonConverter #Optional: Configure a dead-letter queue errors.tolerance=all errors.deadletterqueue.topic.name=test_error errors.deadletterqueue.context.headers.enable = true errors.deadletterqueue.topic.replication.factor=1 -
Kafka Connect'i başlatma
bin/connect-standalone.sh -daemon config/connect-standalone.properties config/selectdb-sink.properties
Örnek 2: Debezium kullanarak MySQL verilerini ApsaraDB for SelectDB ile senkronize etme
Birçok iş senaryosunda operasyonel bir veritabanından gelen verilerin gerçek zamanlı olarak senkronize edilmesi gerekir. Bu durum, veritabanının değişiklik verisi yakalama (CDC) mekanizmasının kullanılmasını gerektirir.
Debezium, Kafka Connect tabanlı bir CDC aracıdır ve MySQL, PostgreSQL, SQL Server, Oracle ve MongoDB gibi çeşitli veritabanlarına bağlanabilir. Veri değişikliklerini sürekli olarak standart bir biçimde bir Kafka konusuna gönderir ve böylece downstream sink'ler tarafından gerçek zamanlı olarak tüketilebilir hale getirir. Bu örnekte MySQL kullanılmaktadır.
-
Debezium'u indirin.
wget https://repo1.maven.org/maven2/io/debezium/debezium-connector-mysql/1.9.8.Final/debezium-connector-mysql-1.9.8.Final-plugin.tar.gz -
İndirilen dosyayı çıkarın.
tar -zxvf debezium-connector-mysql-1.9.8.Final-plugin.tar.gz Çıkarılan tüm JAR dosyalarını KAFKA_HOME/libs dizinine yerleştirin.
-
MySQL kaynağını yapılandırın.
Kafka config dizininde bir mysql-source.properties dosyası oluşturun ve aşağıdaki içeriği ekleyin:
name=mysql-source connector.class=io.debezium.connector.mysql.MySqlConnector database.hostname=rm-bp17372257wkz****.rwlb.rds.aliyuncs.com database.port=3306 database.user=testuser database.password=**** database.server.id=1 # A unique identifier for this client in Kafka database.server.name=test123 # The databases and tables to sync. By default, all databases and tables are synced. database.include.list=test table.include.list=test.test_table database.history.kafka.bootstrap.servers=localhost:9092 # The Kafka topic used to store database schema changes database.history.kafka.topic=dbhistory transforms=unwrap # See https://debezium.io/documentation/reference/stable/transformations/event-flattening.html transforms.unwrap.type=io.debezium.transforms.ExtractNewRecordState # Record delete events transforms.unwrap.delete.handling.mode=rewriteYapılandırmadan sonra varsayılan Kafka konu adı biçimi
SERVER_NAME.DATABASE_NAME.TABLE_NAMEolacaktır.NotDebezium yapılandırmaları için Debezium connector for MySQL sayfasına bakın.
-
ApsaraDB for SelectDB sink'ini yapılandırın.
Kafka config dizininde bir selectdb-sink.properties dosyası oluşturun ve aşağıdaki içeriği ekleyin:
name=selectdb-sink connector.class=org.apache.doris.kafka.connector.DorisSinkConnector topics=test123.test.test_table doris.topic2table.map=test123.test.test_table:test_table buffer.count.records=10000 buffer.flush.time=120 buffer.size.bytes=5000000 doris.urls=selectdb-cn-4xl3jv1****-public.selectdbfe.rds.aliyuncs.com doris.http.port=8030 doris.query.port=9030 doris.user=admin doris.password=**** doris.database=test key.converter=org.apache.kafka.connect.json.JsonConverter value.converter=org.apache.kafka.connect.json.JsonConverter #Optional: Configure a dead-letter queue #errors.tolerance=all #errors.deadletterqueue.topic.name=test_error #errors.deadletterqueue.context.headers.enable = true #errors.deadletterqueue.topic.replication.factor=1NotVerileri ApsaraDB for SelectDB ile senkronize ederken önceden bir veritabanı ve bir tablo oluşturmanız gerekir.
-
Kafka Connect'i başlatın.
bin/connect-standalone.sh -daemon config/connect-standalone.properties config/mysql-source.properties config/selectdb-sink.propertiesNotBaşlatmadan sonra logs/connect.log dosyasını kontrol ederek hizmetin başarıyla başlatıldığını doğrulayabilirsiniz.
Gelişmiş kullanım
Konnektör işlemleri
# Check the connector status
curl -i http://127.0.0.1:8083/connectors/test-selectdb-sink-cluster/status -X GET
# Delete the current connector
curl -i http://127.0.0.1:8083/connectors/test-selectdb-sink-cluster -X DELETE
# Pause the current connector
curl -i http://127.0.0.1:8083/connectors/test-selectdb-sink-cluster/pause -X PUT
# Resume the current connector
curl -i http://127.0.0.1:8083/connectors/test-selectdb-sink-cluster/resume -X PUT
# Restart tasks within the connector
curl -i http://127.0.0.1:8083/connectors/test-selectdb-sink-cluster/tasks/0/restart -X POST
Daha fazla bilgi için Connect REST Interface sayfasına bakın.
Ölü mektup kuyruğu
Varsayılan olarak bir dönüştürme hatası konnektörün başarısız olmasına neden olur. Ancak konnektörü bu tür hataları atlayarak tolere edecek şekilde yapılandırabilirsiniz. Ayrıca hata ayrıntılarını, başarısız işlemi ve sorunlu kaydı daha sonraki analizler için bir ölü mektup kuyruğuna yazabilirsiniz.
errors.tolerance=all
errors.deadletterqueue.topic.name=test_error_topic
errors.deadletterqueue.context.headers.enable=true
errors.deadletterqueue.topic.replication.factor=1
Daha fazla bilgi için Error Reporting in Connect sayfasına bakın.
SSL özellikli bir Kafka kümesine bağlanma
Kafka Connect üzerinden SSL özellikli bir Kafka kümesine erişmek için Kafka broker'ının genel anahtarını doğrulamak üzere bir sertifika dosyası (client.truststore.jks) sağlamanız gerekir. Aşağıdaki yapılandırmayı connect-distributed.properties dosyanıza ekleyebilirsiniz:
# Connect worker
security.protocol=SSL
ssl.truststore.location=/var/ssl/private/client.truststore.jks
ssl.truststore.password=test1234
# Embedded consumer for sink connectors
consumer.security.protocol=SSL
consumer.ssl.truststore.location=/var/ssl/private/client.truststore.jks
consumer.ssl.truststore.password=test1234
Kafka Connect'i SSL özellikli bir Kafka kümesine bağlanacak şekilde yapılandırma hakkında daha fazla bilgi için Configure Kafka Connect sayfasına bakın.