Clickhouse中Kafka Schema Registry的IP缓存时长?有无更优方案?
我们正在使用ClickHouse的Kafka Engine,并配置了format_avro_schema_registry_url参数。运行一段时间后,日志出现如下错误(已隐藏IP):
Code: 1000. DB::Exception: Timeout: connect timed out: XXX.XXX.XXX.XXX:443: while fetching schema id = 1566: while parsing Kafka message
推测是三台ClickHouse节点中的一台长期缓存了Kafka Schema Registry的IP,当IP变更后引发该错误。目前执行systemctl restart clickhouse-server重启服务可消除错误,求更优解决方案?
调整DNS缓存超时配置
ClickHouse依赖自身DNS缓存,可通过修改配置缩短缓存有效期:
在config.xml中添加或更新以下配置:<dns_cache> <max_size>1000</max_size> <ttl>60</ttl> <!-- 缓存有效期,单位秒,可根据业务场景调整为30-300秒 --> </dns_cache>修改后无需重启服务,执行
SYSTEM RELOAD CONFIG命令即可加载新配置。手动刷新DNS缓存
针对出现问题的节点,直接执行ClickHouse内置命令清空DNS缓存,无需重启服务:SYSTEM DROP DNS CACHE;执行后ClickHouse会重新解析Schema Registry域名,获取最新IP。
使用域名而非固定IP配置
确保format_avro_schema_registry_url配置的是Schema Registry的域名而非固定IP,这样IP变更时DNS解析会自动获取新地址,从根源减少这类问题。配置多节点高可用地址
如果Schema Registry有多个实例,可在配置中指定多个地址(用逗号分隔),单个节点IP变更时,ClickHouse会自动尝试其他可用节点:ALTER TABLE your_kafka_table MODIFY SETTING format_avro_schema_registry_url = 'https://schema-registry-node1:443,https://schema-registry-node2:443';
内容的提问来源于stack exchange,提问作者kev

