Docker部署Confluent Schema Registry对接AWS MSK的配置与排障问询
AWS MSK 与 Docker 部署的 Confluent Schema Registry 配合使用指南
可行性说明
完全可以将AWS MSK与Docker部署的Confluent Schema Registry配合使用,能满足你用AVRO格式发布消息、通过Schema Registry管理schema、消费时反序列化的需求。
关键配置属性(Docker环境)
针对你碰到的java.lang.RuntimeException: No endpoints found for security protocol [PLAINTEXT]. Endpoints found in ZK.错误,核心是要正确配置Schema Registry连接MSK集群的参数,以下是Docker启动时必须设置的关键环境变量:
SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS:指定MSK集群的明文(PLAINTEXT)或SSL协议的Bootstrap服务器地址,绝对不能用ZooKeeper地址(这就是错误的根源)。MSK的Bootstrap地址格式类似b-1.xxx.xx.kafka.us-east-1.amazonaws.com:9092,b-2.xxx.xx.kafka.us-east-1.amazonaws.com:9092SCHEMA_REGISTRY_HOST_NAME:Schema Registry容器的主机名或可被客户端访问的IP地址,确保外部能正常连接到它SCHEMA_REGISTRY_LISTENERS:Schema Registry的监听地址,默认http://0.0.0.0:8081即可,无需修改- 如果你的MSK集群启用了IAM认证,还需额外添加以下配置:
SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL=SASL_SSLSCHEMA_REGISTRY_KAFKASTORE_SASL_MECHANISM=AWS_MSK_IAMSCHEMA_REGISTRY_KAFKASTORE_SASL_JAAS_CONFIG=software.amazon.msk.auth.iam.IAMLoginModule required;SCHEMA_REGISTRY_KAFKASTORE_SASL_CLIENT_CALLBACK_HANDLER_CLASS=software.amazon.msk.auth.iam.IAMClientCallbackHandler
同时需要给Docker容器挂载AWS认证凭证(比如本地的~/.aws/credentials)或者为容器赋予对应的IAM角色权限
示例Docker启动命令
docker run -d \ --name confluent-schema-registry \ -p 8081:8081 \ -e SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS="b-1.xxx.xx.kafka.us-east-1.amazonaws.com:9092,b-2.xxx.xx.kafka.us-east-1.amazonaws.com:9092" \ -e SCHEMA_REGISTRY_HOST_NAME=localhost \ -e SCHEMA_REGISTRY_LISTENERS=http://0.0.0.0:8081 \ confluentinc/cp-schema-registry:latest
错误原因解析
你遇到的错误是因为Schema Registry默认尝试通过ZooKeeper地址连接Kafka集群,但MSK不推荐直接使用ZK地址访问,且你指定的安全协议是PLAINTEXT,而ZK中存储的端点与该协议不匹配。解决的核心就是将SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS设置为MSK的Bootstrap服务器地址,而非ZK地址。
内容的提问来源于stack exchange,提问作者user1721446
相关产品推荐
相关产品推荐

