
# FlinkSQL ClickHouse表开发建议
#### 配置多个ClickHouseBalancer实例IP
配置多个ClickHouseBalancer实例IP可以避免ClickHouseBalancer实例单点故障。相关配置（with属性）如下：
```
'url' = 'jdbc:clickhouse://ClickHouseBalancer实例IP1:ClickHouseBalancer端口,ClickHouseBalancer实例IP2:ClickHouseBalancer端口/default',
```
![](https://support.huaweicloud.com/devg-rule-mrs/public_sys-resources/note_3.0-zh-cn.png)
- ClickHouseBalancer实例IP：服务的实例IP地址可通过登录Manager界面后，选择"集群 \> 服务 \> ClickHouse \> 实例"，在实例列表页面中查询。
- ClickHouseBalancer端口：根据对接的ClickHouse逻辑集群选择。登录FusionInsight Manager后，选择"集群 \> 服务 \> ClickHouse \> 逻辑集群"，查看"HTTP Balancer端口号"。
 
#### Sink表配置合适的攒批参数
攒批写参数：
Flink会将数据先放入内存，到达触发条件时再flush到数据库表中。
相关配置如下：
- sink.buffer-flush.max-rows：攒批写ClickHouse的行数，默认100。
- sink.buffer-flush.interval：攒批写入的间隔时间，默认1s。
两个条件只要有一个满足，就会触发一次sink，即到达触发条件时再flush到数据库表中。
- 示例1：60秒sink一次
  ```
  'sink.buffer-flush.max-rows' = '0',
  'sink.buffer-flush.interval' = '60s'
  ```
  

- 示例2：100条sink一次
  ```
  'sink.buffer-flush.max-rows' = '100',
  'sink.buffer-flush.interval' = '0s'
  ```
  

- 示例3：数据不sink
  ```
  'sink.buffer-flush.max-rows' = '0',
  'sink.buffer-flush.interval' = '0s'
  ```
  
 
#### 配置去重需在ClickHouse中创建ReplacingMergeTree表
由于Flink写入ClickHouseBalancer无法保证同key数据写入同一个ClickHouseServer中，所以同key数据的合并需要依赖ClickHouse的ReplacingMergeTree引擎。
