Я использую Kafka Connect из Confluent для использования потока Kafka и записи в HDFS в формате паркета. Я использую службу реестра схем в 1 узле, и она работает нормально. Теперь я хочу передать реестр схем в кластерный режим для обработки отказа. Любая ссылка или фрагмент о том, как этого добиться, будут очень полезны.
Режим кластера реестра конфлюентной схемы
Ответы (4)
Трудно найти, но мы рассмотрели эту архитектуру в нашей документации: http://docs.confluent.io/3.0.0/schema-registry/docs/deployment.html#multi-dc-setup
Немного процитирую документы (хотя вы должны прочитать документацию, в нее входит множество хороших советов по архитектуре и модуль Runbook для восстановления):
Предполагая, что у вас запущен реестр схем, вот рекомендуемые шаги для добавления экземпляров реестра схем в новый «подчиненный» центр обработки данных (назовите его DC B):
В DC B убедитесь, что у Kafka unclean.leader.election.enable установлено значение false. В Kafka на DC B создайте тему _schemas. У него должен быть 1 раздел, kafkastore.topic.replication.factor, равный 3, и мин.insync.replicas как минимум 2. В DC B запустите MirrorMaker с Kafka в «главном» центре обработки данных в качестве источника и Kafka в DC B в качестве источника. цель. В файлах конфигурации реестра схемы на DC B установите kafkastore.connection.url и schema.registry.zk.namespace в соответствии с уже запущенными экземплярами и установите для master.eligibility значение false. Запустите свои новые экземпляры реестра схем с этими конфигурациями.
8081
, а другой - 18081
; Оба ли они принимают GET
запросов? Хотя я могу получить ответ при вызове kafka-host:8081/subjects
, я не могу получить ответ для kafka-host:18081/subjects
. Это нормальное поведение?
- person Giorgos Myrianthous; 11.12.2018
Я использовал объединенный докер схемы и реестра image для формирования кластера.
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
во всех узлах.