【问题标题】:Confluent Schema Registry Cluster ModeConfluent Schema Registry 集群模式
【发布时间】:2020-06-18 16:41:10
【问题描述】:

我正在使用 Confluent 的 Kafka Connect 来使用 Kafka 流并以 parquet 格式写入 HDFS。我在 1 个节点中使用 Schema Registry 服务,它运行良好。现在我想将 Schema Registry 分发到集群模式来处理故障转移。任何关于如何实现这一点的链接或 sn-p 都将非常有用。

【问题讨论】:

    标签: apache-kafka confluent-platform


    【解决方案1】:

    很难找到,但我们在文档中介绍了这种架构: 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 实例。

    【讨论】:

    • 感谢格温提供的信息。我的用例不是多 DC。我只需要通过使其成为集群(主从)来使当前正在运行的模式注册表来处理故障转移。我只有一次 DC 和一次 Kafka 集群。
    • 啊,那样的话,只需安装两个模式注册服务器并将它们指向同一个zookeeper路径。其中一个将成为领导者,另一个将自动成为追随者。您可以在 ZooKeeper 中的 //schema_registry_master 路径中看到当前的领导者
    • 谢谢格温。另外请让我知道如何使用模式注册服务。目前我使用的是 http://:port。现在添加额外的服务器后,我如何在使用服务时指向一个通用名称?
    • @GwenShapira 假设我有两个 Schema Registry 实例启动并运行,一个监听 8081,另一个监听 18081;他们都接受GET 请求吗?虽然我在调用kafka-host:8081/subjects 时能够得到响应,但我无法得到kafka-host:18081/subjects 的响应。这是正常行为吗?
    【解决方案2】:

    我使用了 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}
    #
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      你只需要把这个放在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
      

      希望这对你有用。

      【讨论】:

      • 嗯,这真的合法吗?因为,如果你想用新的模式注册表等添加新的连接怎么办?你需要在每个连接上添加新的模式 URL,这意味着 - 你需要重新启动每个连接,这可能是灾难性的。这不是你想要避免的吗?
      【解决方案4】:

      不要忘记在所有节点中提及master.eligibility=true

      【讨论】:

        猜你喜欢
        • 2020-01-25
        • 2023-02-13
        • 1970-01-01
        • 2021-10-04
        • 2019-05-01
        • 2021-01-11
        • 2023-01-11
        • 1970-01-01
        • 2019-07-21
        相关资源
        最近更新 更多