KAFKA配置要点

KAFKA配置要点

四、Kafka注意事项

如果kafka配置的不好, 会发生比较严重的数据倾斜,而且在压力较大的情况会导致数据丢失。所以跟Kafka有关的如下配置,请一定要认真阅读

注意kafka server num.partitions一定要大于总分片数的两倍,否则有的进程消费不到数据,导致数据倾斜。YDB的总分片数为YA100_EXECUTORS*spark.executor.max.usedcores);

注:spark.executor.max.usedcores默认(没有配置)为2个,表示每个进程会启动2个分片。

l数据丢失根本问题在于磁盘与网络是否繁忙!!!!!!

如果磁盘长时间使用率100%,必出现丢数据,会出现如下异常,配置的kafka retry机制无效

 

l如果我们先前采用的send方法没使用callback,一旦消息发送失败,我们没有处理异常的话,这个消息就丢了。

这个问题如何解决?

1)如果有条件,Kafka尽量独立集群,最低要求也一定要独立磁盘,并且写入限速

独立磁盘是解决问题的根本,磁盘很繁忙的情况下,broker出错的概率很大。

2)send 里面的callback,如果是异常一定要自己做容错处理

发现send函数里的callback,一定要对Exception exception不是null的情况做重试处理,一定要处理,根据判断重试几次。

 

3)调整kafka的参数

a)建议在Producter端增加如下参数

       props.put(“compression.type”, “gzip”);
       props.put(“linger.ms”, “50”);
       props.put(“acks”, “all”);
       props.put(“retries “, 30);
       props.put(“reconnect.backoff.ms “, 20000);
       props.put(“retry.backoff.ms”, 20000);

b)Server端的broker增加如下配置