Kafka-connector-elasticsearch设计解析

   今日抽时间,对Kafka-connector-elasticsearch的源码进行了简单研究,主要梳理其设计思路和关键设计点, 其主要时序图如下:

主要设计点总结如下:

 (1)ElasticsearchSinkConnectorConfig类,容易可扩展配置参数,并可对参数的正确性进行效验。

(2)高吞吐线程池设计,conenctor数据输入为kafka, 通过扩kafka partition可以提供吞吐量,可一味地扩patition,吞吐量提高有限,并且对整体topic的维护变得复杂。作者采用的队列和线程池的设计方案,拉取kafka数据存取队列,farmer线程负责将队列中的数据提交给线程池,线程池负责将数据写入ES ,这样通过增大partition和线程池线程数可以获取较高的吞吐量,满足数据量大的数据写入。 

(3)多线程协调设计,通过原生wait和notifyAll实现。队列采用了ArrayDeque,非线程安全,往队列中添加数据和取数采用了同一个类对象锁,避免线程安全问题,farmer线程获取对象锁,获取从队列中获取数据并判断是否提交批次任务条件(队列不为空,且达到batchsize),未达到要求时,farmer线程wait,释放对象锁。  往队列add 操作时首先获取锁,add成功之后进行notifyAll,释放锁,  唤醒farmer线程再获取索引,去判断是否符合条件提交批次写入任务。 

wait和nofify 原理参照:https://www.liaoxuefeng.com/wiki/1252599548343744/1306580911915042

源码代码片段:https://snippets.cacher.io/snippet/68e62aab71324c9d77dc

(4)线程异常的处理,定义ThreadFactory,定义线程UncaughtExceptionHandler。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值