当前位置: 首页 > news >正文

it项目网站开发的需求文档紫川网站建设

it项目网站开发的需求文档,紫川网站建设,镇江网站推广排名,wordpress付费看目录 前言 kafka consumer 设计原理 多线程的方案 参考资料 前言 目前,计算机的硬件条件已经大大改善,即使是在普通的笔记本电脑上,多核都已经是标配了,更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序依然是单…

目录

前言

kafka consumer 设计原理

多线程的方案 

参考资料


前言

目前,计算机的硬件条件已经大大改善,即使是在普通的笔记本电脑上,多核都已经是标配了,更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序依然是单线程架构,那实在是有点暴殄天物了。不过,Kafka Java Consumer 就是单线程的设计,你是不是感到很惊讶。所以,探究它的多线程消费方案,就显得非常必要了。

kafka consumer 设计原理

 从 Kafka 0.10.1.0 版本开始,KafkaConsumer 就变为了双线程的设计,即用户主线程和心跳线程。

 所谓用户主线程,就是你启动 Consumer 应用程序 main 方法的那个线程,而新引入的心跳线程(Heartbeat Thread)只负责定期给对应的 Broker 机器发送心跳请求,以标识消费者应用的存活性(liveness)。引入这个心跳线程还有一个目的,那就是期望它能将心跳频率与主线程调用 KafkaConsumer.poll 方法的频率分开,从而解耦真实的消息处理逻辑与消费者组成员存活性管理。

 单线程的设计能够简化 Consumer 端的设计。Consumer 获取到消息后,处理消息的逻辑是否采用多线程,完全由你决定。这样,你就拥有了把消息处理的多线程管理策略从 Consumer 端代码中剥离的权利。

多线程的方案 

 我们要明确的是,KafkaConsumer 类不是线程安全的 (thread-safe)。所有的网络 I/O 处理都是发生在用户主线程中,因此,你在使用过程中必须要确保线程安全。简单来说,不能在多个线程中共享同一个 KafkaConsumer 实例,否则程序会抛出 ConcurrentModificationException 异常。

由于kafka consumer不是线程安全,我么你能制定两种多线程的方案。

1.消费者程序启动多个线程,每个线程维护专属的 KafkaConsumer 实例,负责完整的消息获取、消息处理流程。如下图所示:

 2.消费者程序使用单或多线程获取消息,同时创建多个消费线程执行消息处理逻辑。获取消息的线程可以是一个,也可以是多个,每个线程维护专属的 KafkaConsumer 实例,处理消息则交由特定的线程池来做,从而实现消息获取与消息处理的真正解耦。具体架构如下图所示:

我们来打个比方。比如一个完整的消费者应用程序要做的事情是 1、2、3、4、5,那么方案 1 的思路是粗粒度化的工作划分,也就是说方案 1 会创建多个线程,每个线程完整地执行 1、2、3、4、5,以实现并行处理的目标,它不会进一步分割具体的子任务;而方案 2 则更细粒度化,它会将 1、2 分割出来,用单线程(也可以是多线程)来做,对于 3、4、5,则用另外的多个线程来做。 

这两种方案的比较如下:

实现代码示例如下:

方案一的代码:

public class KafkaConsumerRunner implements Runnable {private final AtomicBoolean closed = new AtomicBoolean(false);private final KafkaConsumer consumer;public void run() {try {consumer.subscribe(Arrays.asList("topic"));while (!closed.get()) {ConsumerRecords records = consumer.poll(Duration.ofMillis(10000));//  执行消息处理逻辑}} catch (WakeupException e) {// Ignore exception if closingif (!closed.get()) throw e;} finally {consumer.close();}}// Shutdown hook which can be called from a separate threadpublic void shutdown() {closed.set(true);consumer.wakeup();}

这段代码创建了一个 Runnable 类,表示执行消费获取和消费处理的逻辑。每个 KafkaConsumerRunner 类都会创建一个专属的 KafkaConsumer 实例。在实际应用中,你可以创建多个 KafkaConsumerRunner 实例,并依次执行启动它们,以实现方案 1 的多线程架构

方案2 的代码:

private final KafkaConsumer<String, String> consumer;
private ExecutorService executors;
...private int workerNum = ...;
executors = new ThreadPoolExecutor(workerNum, workerNum, 0L, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(1000), new ThreadPoolExecutor.CallerRunsPolicy());...
while (true)  {ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(1));for (final ConsumerRecord record : records) {executors.submit(new Worker(record));}
}
..

参考资料

20 | 多线程开发消费者实例-极客时间

http://www.yayakq.cn/news/371898/

相关文章:

  • 广州网站设计公司排名黄陂区建设招标网站
  • 好的手机端网站模板下载乐清最新招聘信息网
  • 京东商城网站地址威海建设集团网站
  • 外贸企业网站推广公司杭州的设计网站
  • 做网站php与python手机网站怎么制作软件
  • 猪八戒网站开发合同wordpress 发表代码
  • 做网店的网站网站开发工程师简介
  • html5制作网站谁的好清除wordpress开发痕迹
  • 传统网站和手机网站的区别是什么电子商务网站建设人才
  • 网站建设套餐电话WordPress做的网站源代码
  • 网站建设及数据分析dw是网页制作平台吗
  • 定制网站建设公司哪家便宜织梦cms通用蓝白简介大气企业网站环保科技公司源码
  • 甘肃网站建设方案优化广州 Wix网站开发
  • 凡科网站怎么做wordpress完全卸载教程
  • 用html制作简单的购物网站万州建设工程信息网站
  • 如何注册国外网站软件项目管理案例
  • 关于h5的网站模板个人网站可以不备案吗
  • 如何自己做网站的优化推广wordpress用户发表文章
  • 宁波自助建站网站网站建设做到哪些内容
  • 营销型网站建设找哪家程序员接私活要达到什么水平
  • 网页设计网站值得推荐电脑科技网站模板
  • 不会代码怎么做网站咸宁做网站公司
  • 设计最简单的企业网站网站制作公司拟
  • 工业信息化网站备案系统网站开发工具介绍
  • 企业如何制作网站管理系统平面设计海报作品欣赏
  • 商城网站 免费开源wordpress 拉不到底
  • 做网站与全网营销搜索推广排名优化国内比较牛的网站建设
  • 海外网站哪个最好郑州网站外包公司简介
  • 如何扫描一个网站的漏洞重庆建设网官网
  • 网站原型的交互怎么做天津市网站建站制作