我正在使用来自 Confluent 的 Kafka Connect 来使用 Kafka 流并以 parquet 格式写入 HDFS。我在 1 个节点中使用 Schema Registry 服务,它运行良好。现在我想将 Schema Registry 分发到集群模式来处理故障转移。关于如何实现这一点的任何链接或片段都将非常有用。
4 回答
很难找到,但我们在文档中介绍了这种架构:http: //docs.confluent.io/3.0.0/schema-registry/docs/deployment.html#multi-dc-setup
稍微引用一下文档(尽管您应该阅读文档,但其中包含许多良好的架构建议和恢复操作手册):
假设您正在运行 Schema Registry,以下是在新的“从属”数据中心(称为 DC B)中添加 Schema Registry 实例的推荐步骤:
在 DC B 中,确保 Kafka 将 unclean.leader.election.enable 设置为 false。在 DC B 的 Kafka 中,创建 _schemas 主题。它应该有 1 个分区,kafkastore.topic.replication.factor 为 3,min.insync.replicas 至少为 2。在 DC B 中,以“主”数据中心中的 Kafka 作为源运行 MirrorMaker,DC B 中的 Kafka 作为源目标。在 DC B 的 Schema Registry 配置文件中,设置 kafkastore.connection.url 和 schema.registry.zk.namespace 以匹配已运行的实例,并将 master.eligibility 设置为 false。使用这些配置启动新的 Schema Registry 实例。
我使用 confluent schema-registry docker 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 内容来验证是否形成了 schema-registry 集群以及它的领导者选举是否成功。
$ 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 中就可以使用多模式注册表:</p>
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
在所有节点中提及。