Режим кластера реестра Confluent Schema

Я использую Kafka Connect из Confluent для использования потока Kafka и записи в HDFS в формате паркета. Я использую службу реестра Schema в 1 узле, и она работает нормально. Теперь я хочу перевести реестр схем в режим кластера, чтобы обработать отказоустойчивость. Любая ссылка или фрагмент о том, как этого добиться, будет очень полезна.

2 ответа

Трудно найти, но мы рассмотрели эту архитектуру в нашей документации: http://docs.confluent.io/3.0.0/schema-registry/docs/deployment.html

Немного процитирую из документации (хотя вы должны прочитать документы, в нее включено много полезных советов по архитектуре и runbook для восстановления):

Предполагая, что у вас запущен Реестр Схем, вот рекомендуемые шаги для добавления экземпляров Реестра Схем в новый "ведомый" центр обработки данных (назовите его DC B):

В DC ​​B убедитесь, что для Kafka unclean.leader.election.enable установлено значение false. В Kafka в DC B создайте тему _schemas. Он должен иметь 1 раздел, kafkastore.topic.replication.factor, равный 3, и min.insync.replicas не менее 2. В DC B запустите MirrorMaker с Kafka в центре данных "master" в качестве источника и Kafka в DC B в качестве источника цель. В файлах конфигурации реестра схем в DC B установите kafkastore.connection.url и schema.registry.zk.namespace, чтобы соответствовать уже запущенным экземплярам, ​​и установите для master.eligibility значение false. Запустите новые экземпляры реестра схемы с этими конфигами.

Я использовал объединенный образ докера схемы и реестра для формирования кластера.

docker run --restart always -d -p 8081:8081 --name=schema-registry-1 -e SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL=ip1:2181,ip2:2181,ip3:2181 -e SCHEMA_REGISTRY_HOST_NAME=schema-registry-1 -e SCHEMA_REGISTRY_LISTENERS=http://0.0.0.0:8081 -e SCHEMA_REGISTRY_DEBUG=true confluentinc/cp-schema-registry:5.2.1-1

docker run --restart always -d -p 8081:8081 --name=schema-registry-2 -e SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL=ip1:2181,ip2:2181,ip3:2181 -e SCHEMA_REGISTRY_HOST_NAME=schema-registry-2 -e SCHEMA_REGISTRY_LISTENERS=http://0.0.0.0:8081 -e SCHEMA_REGISTRY_DEBUG=true confluentinc/cp-schema-registry:5.2.1-1

docker run --restart always -d -p 8081:8081 --name=schema-registry-3 -e SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL=ip1:2181,ip2:2181,ip3:2181 -e SCHEMA_REGISTRY_HOST_NAME=schema-registry-3 -e SCHEMA_REGISTRY_LISTENERS=http://0.0.0.0:8081 -e SCHEMA_REGISTRY_DEBUG=true confluentinc/cp-schema-registry:5.2.1-1

После того, как это было запущено и запущено, я проверил, сформирован ли кластер реестра схем и успешно ли выбрано его лидера, проверив содержимое zookeeper.

$ docker exec -it zookeeper bash
# /usr/bin/zookeeper-shell localhost:2181
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[schema_registry, cluster, controller, brokers, zookeeper, admin, isr_change_notification, log_dir_event_notification, controller_epoch, kafka-manager, CruiseControlBrokerList, consumers, latest_producer_id_block, config]
[zk: localhost:2181(CONNECTED) 1] ls /schema_registry
[schema_registry_master, schema_id_counter]
[zk: localhost:2181(CONNECTED) 4] get /schema_registry/schema_registry_master
{"host":"schema-registry-1","port":8081,"master_eligibility":true,"scheme":"http","version":1}
#

Надеюсь это поможет.

Вам просто нужно поместить это в connect-avro-distributed.properties, чтобы использовать реестр нескольких схем:

key.converter.schema.registry.url=http://node1:8081,http://node2:8081
value.converter.schema.registry.url=http://node1:8081,http://node2:8081

Надеюсь, это полезно для вас.

Не забудьте упомянуть master.eligibility=true во всех узлах.

Другие вопросы по тегам