这里的文档https://docs.confluent.io/current/schema-registry/index.html提到了一种使用单个URL的可能性,这意味着也可以使用多个逗号分隔的URL,然而,问题是建议使用什么,为什么使用F5之类的东西,或者简单地使用逗号分隔的URL?
我用kafka-avro-console-producer和kafka-avro-console-consumer测试了逗号分隔的URL,虽然后者总是按照预期运行,但前者有时会返回(打印到控制台)当其中一个URL不好时>>ERROR无法向endpoint<<发送HTTP请求,尽管它会向Kafka生成消息,但它不会崩溃。我希望它不会这样做,但在实际的应用程序代码中,这样的异常总是可以忽略的。它实际上打印了整个错误堆栈,而不仅仅是这几个单词。我也见过这个:https://github.com/confluentinc/confluent-kafka-dotnet/issues/711
我们将使用3个URL作为配置参数值,您认为如何?
我们使用Java客户端,代码如下所示:
final Properties props = new Properties();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka1:9092,kafka2:9092,kafka3:9092");
props.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group");
props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "true");
props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000");
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
props.put(AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG, "http://kafka1:8081,http://kafka2:8081,http://kafka3:8081");
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, KafkaAvroDeserializer.class);
props.put(KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG, true); 因此,假设我们有3个kafka代理服务器节点,kafka1,kafka2和kafka3,并且我们在每个节点上启动了一个模式注册表实例,我们是应该使用上面示例中对BOOTSTRAP_SERVERS_CONFIG所做的类似语法来定义SCHEMA_REGISTRY_URL_CONFIG,还是应该使用外部负载均衡器,例如F5,或循环DNS,并让它提供一个解析为kafka1、kafka2和kafka3的ipaddr/别名(如下面示例中的schema_registry_loadbalanced )?将在应用程序代码中使用,如下所示:
props.put(AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG, "http://schema_registry_loadbalanced:8081");对于kafka连接,我们不认为外部负载均衡器提供太多好处,但对于模式注册表,我们不确定。
发布于 2019-05-04 02:43:09
这取决于您的客户机,但Java属性至少被设置为接受配置类型作为URL列表。
在我工作的地方,注册表是一个负载均衡器,所以不管怎样,它是一个URL。
https://stackoverflow.com/questions/55965935
复制相似问题