【发布时间】:2020-06-18 16:41:10
【问题描述】:
我正在使用 Confluent 的 Kafka Connect 来使用 Kafka 流并以 parquet 格式写入 HDFS。我在 1 个节点中使用 Schema Registry 服务,它运行良好。现在我想将 Schema Registry 分发到集群模式来处理故障转移。任何关于如何实现这一点的链接或 sn-p 都将非常有用。
【问题讨论】:
标签: apache-kafka confluent-platform
我正在使用 Confluent 的 Kafka Connect 来使用 Kafka 流并以 parquet 格式写入 HDFS。我在 1 个节点中使用 Schema Registry 服务,它运行良好。现在我想将 Schema Registry 分发到集群模式来处理故障转移。任何关于如何实现这一点的链接或 sn-p 都将非常有用。
【问题讨论】:
标签: apache-kafka confluent-platform
很难找到,但我们在文档中介绍了这种架构: http://docs.confluent.io/3.0.0/schema-registry/docs/deployment.html#multi-dc-setup
稍微引用一下文档(尽管您应该阅读文档,但其中包含许多良好的架构建议和恢复操作手册):
假设您正在运行 Schema Registry,以下是推荐的 在新的“从属”数据中心中添加 Schema Registry 实例的步骤 (称它为 DC B):
在 DC B 中,确保 Kafka 将 unclean.leader.election.enable 设置为 错误的。在 DC B 的 Kafka 中,创建 _schemas 主题。它应该有 1 分区,kafkastore.topic.replication.factor 为 3,以及 min.insync.replicas 至少 2. 在 DC B 中,使用 Kafka 运行 MirrorMaker “主”数据中心作为源,数据中心 B 中的 Kafka 作为目标。 在 DC B 的 Schema Registry 配置文件中,设置 kafkastore.connection.url 和 schema.registry.zk.namespace 匹配 实例已经运行,并将 master.eligibility 设置为 false。 使用这些配置启动新的 Schema Registry 实例。
【讨论】:
8081,另一个监听 18081;他们都接受GET 请求吗?虽然我在调用kafka-host:8081/subjects 时能够得到响应,但我无法得到kafka-host:18081/subjects 的响应。这是正常行为吗?
我使用了 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中就可以使用多模式注册:
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。
【讨论】: