DDMQ

滴滴 Flink-1.10 升级之路

霸气de小男生 提交于 2021-02-03 11:02:07
简介: 滴滴实时计算引擎从 Flink-1.4 无缝升级到 Flink-1.10 版本,做到了完全对用户透明。并且在新版本的指标、调度、SQL 引擎等进行了一些优化,在性能和易用性上相较旧版本都有很大提升。 一、 背景 在本次升级之前,我们使用的主要版本为 Flink-1.4.2,并且在社区版本上进行了一些增强,提供了 StreamSQL 和低阶 API 两种服务形式。现有集群规模达到了 1500 台物理机,运行任务数超过 12000 ,日均处理数据 3 万亿条左右。 不过随着社区的发展,尤其是 Blink 合入 master 后有很多功能和架构上的升级,我们希望能通过版本升级提供更好的流计算服务。今年 2 月份,里程碑版本 Flink-1.10 发布,我们开始在新版上上进行开发工作,踏上了充满挑战的升级之路。 二、 Flink-1.10 新特性 作为 Flink 社区至今为止的最大的一次版本升级,加入的新特性解决了之前遇到很多的痛点。 1. 原生 DDL 语法与 Catalog 支持 Flink SQL 原生支持了 DDL 语法,比如 CREATE TABLE/CREATE FUNCTION,可以使用 SQL 进行元数据的注册,而不需要使用代码的方式。 也提供了 Catalog 的支持,默认使用 InMemoryCatalog 将信息临时保存在内存中,同时也提供了

在公司写代码时,我总想回家带娃。

余生长醉 提交于 2020-12-25 10:23:07
桔妹导读 :离天空最近的地方,是父亲的肩膀。在这个特别的日子里,小编也搜集了一些滴滴年轻的工程师奶爸们的分享,听他们聊一聊当爸的初体验。也借此机会祝福所有做了父亲的工程师们,节日快乐! 内心充满激动和紧张 @张军 娃刚出生第五天黄疸严重,在医院住了五天,每天都会去医院给娃送母乳,但是医院管理严格,全程见不到娃,内心甚是想念。最难忘的是出院那天,去医院的路上,一想到就能见到娃,内心很是激动,那感觉已经超越了第一次约姑娘见面时内心的忐忑和紧张,也终于理解了父母对孩子的爱有多深。 见证了她 每一个 版本的「迭代」 @王道含 # Changelog # # 0.0.1 2019-3-21 feat: init # # 0.2.10 2019-5-31 feat: grab # # 0.3.2 2019-6-22 feat: turn over # # 0.5.7 2019-8-28 feat: sitting feat: climb # # 0.10.18 2020-2-8 feat: run # 1.0.5 2020-3-26 feat: say papa 作为我为数不多准时上线的产品,也见证了她一个一个版本的迭代。从一个脆弱的功能单一的噪音系统,通过硬件和软件的不断升级,逐步变成了一个人形自走多媒体交互语音系统。在陪伴和观察她成长的过程中,我也会有更多的想要去努力的动力

滴滴实时数仓逐层剖解:实时与离线数据误差<0.5%

 ̄綄美尐妖づ 提交于 2020-11-18 09:30:22
作者介绍 潘澄, 资深软件开发工程师。负责实时数据仓库建设,多年数据相关工作经验,专注数据建模、数据仓库、实时数据技术等领域。 朱峰, 高级软件开发工程师。主要从事实时数据仓库建设,专注实时和离线数仓技术,对数仓建模、数据研发和数仓中间层建设有一定的积累。 前言 随着滴滴业务的高速发展,业务对于数据时效性的需求越来越高,而伴随着实时技术的不断发展和成熟,滴滴也对实时建设做了大量的尝试和实践。本文主要以顺风车这个业务为引子,从引擎侧、平台侧和业务侧各个不同方面,来阐述滴滴所做的工作,分享在建设过程中的经验。 一、实时数仓建设目的 随着互联网的发展进入下半场,数据的时效性对企业的精细化运营越来越重要,商场如战场,在每天产生的海量数据中,如何能实时有效的挖掘出有价值的信息, 对企业的决策运营策略调整有很大帮助。 其次从智能商业的角度来讲,数据的结果代表了用户的反馈,获取结果的及时性就显得尤为重要,快速的获取数据反馈能够帮助公司更快的做出决策,更好的进行产品迭代,实时数仓在这一过程中起到了不可替代的作用。 1 、解决传统数仓的问题 从目前数仓建设的现状来看,实时数仓是一个容易让人产生混淆的概念,根据传统经验分析,数仓有一个重要的功能,即能够记录历史。通常,数仓都是希望从业务上线的第一天开始有数据,然后一直记录到现在。但实时流处理技术,又是强调当前处理状态的一个技术

RocketMQ学习教程:06.延迟消息【云图智联】

一个人想着一个人 提交于 2020-08-09 11:56:43
延迟消息是实际开发中一个非常有用的功能,本文第一部分从整体上介绍秒级精度延迟消息的实现思路,在第二部分结合RocketMQ的延迟消息实现,进行细致的讲解,点出关键部分的源码。第三步介绍延迟消息与消息重试的关系。 1 延迟消息介绍 基本概念:延迟消息是指生产者发送消息发送消息后,不能立刻被消费者消费,需要等待指定的时间后才可以被消费。 场景案例:用户下了一个订单之后,需要在指定时间内(例如30分钟)进行支付,在到期之前可以发送一个消息提醒用户进行支付。 一些消息中间件的Broker端内置了延迟消息支持的能力,如: NSQ: 这是一个go语言的消息中间件,其通过内存中的优先级队列来保存延迟消息,支持秒级精度,最多2个小时延迟。Java中也有对应的实现,如ScheduledThreadPoolExecutor内部实际上也是使用了优先级队列。 QMQ: 采用双重时间轮实现。 https://www.toutiao.com/i6851807550690722312/ RabbitMQ: 需要安装一个rabbitmq_delayed_message_exchange插件。 RocketMQ: RocketMQ 开源版本延迟消息临时存储在一个内部主题SCHEDULE_TOPIC_XXXX中, 不支持任意时间精度,支持特定的 level,例如定时 5s,10s,1m 等。

redis实现消息队列

老子叫甜甜 提交于 2020-05-05 08:38:59
工作中遇到一个业务场景,A系统会批量刷新主数据,每次以单条传递到我的系统B(A系统没有办法做一次传多条主数据信息),并且有时传递的数据会有顺序要求; 最近批量同步主数据系统时,出现了B没有可用连接提供给A; 原因:大概是这样的,B系统每接收到一个请求,首先校验是否存在编号,存在做更新,不存在做插入,完事之后再同步给另外一个系统; 系统B是多节点部署,在判断是在做更新或插入时,有并发问题,所以对编码进行了加锁处理;导致有些相同编码持有连接无法释放,耗尽系统资源; 1.使用MQ进行削峰 这种问题也只有在批量刷新主数据的时候才会有,平时的少数更新或插入不会出现这种问题; 想到使用MQ进行削峰,如果是使用DDMQ/RabbitMQ感觉有些小题大做,所以采用redis的队列进行处理; 2.redis实现消息队列 redis提供了list类型,此类型底层是通过双向链表来实现: lpush、rpop 非阻塞式 blpop、brpop 阻塞式 先来对比一下上面阻塞与非阻塞会有什么问题; 1.阻塞式:如果队列里面没有消息,会阻塞连接,长时间占用redis连接,需要考虑redis配置的超时以及redis会对空闲连接进行释放以减少资源浪费,需要对异常进行捕获重试; 2.非阻塞式:如果是1s主动去redis中拉取一次消息,也不太适合; 解决方案: 1.存数据时,采用rpush,从右边添加; 2.取数据时

聊聊carrera的GroovyScriptAction

佐手、 提交于 2020-02-27 23:03:09
序 本文主要研究一下carrera的GroovyScriptAction Action DDMQ/carrera-consumer/src/main/java/com/xiaojukeji/carrera/cproxy/actions/Action.java public interface Action { enum Status { FAIL, CONTINUE, FINISH, ASYNCHRONIZED } class UnsupportedDataType extends RuntimeException { } default Status act(UpstreamJob job) { Object data = job.getData(); if (data instanceof byte[]) { return act(job, (byte[]) data); } else if (data instanceof JSONObject) { return act(job, (JSONObject) data); } else { throw new UnsupportedDataType(); } } default Status act(UpstreamJob job, byte[] bytes) { throw new UnsupportedDataType()

聊聊carrera的RocketMQProduceOffsetFetcher

让人想犯罪 __ 提交于 2020-01-09 23:17:15
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 序 本文主要研究一下carrera的RocketMQProduceOffsetFetcher RocketMQProduceOffsetFetcher DDMQ/carrera-monitor/src/main/java/com/xiaojukeji/carrera/monitor/lag/offset/RocketMQProduceOffsetFetcher.java public class RocketMQProduceOffsetFetcher { private static final Logger LOGGER = LoggerFactory.getLogger(RocketMQProduceOffsetFetcher.class); private DefaultMQAdminExt defaultMQAdminExt; private DefaultMQPullConsumer defaultMQPullConsumer; private String namesrvAddr; public RocketMQProduceOffsetFetcher(String namesrvAddr) { this.defaultMQAdminExt = new DefaultMQAdminExt();

聊聊chronos的cancelMessage

六眼飞鱼酱① 提交于 2020-01-06 23:03:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 序 本文主要研究一下chronos的cancelMessage MqPullService DDMQ/carrera-chronos/src/main/java/com/xiaojukeji/chronos/services/MqPullService.java public class MqPullService implements Runnable { private static final Logger LOGGER = LoggerFactory.getLogger(MqPullService.class); private static final PullConfig PULL_CONFIG = ConfigManager.getConfig().getPullConfig(); private static final Batcher BATCHER = Batcher.getInstance(); private volatile boolean shouldStop = false; private CountDownLatch cdl; private final List<Long> succOffsets = new ArrayList<>(); private final List

聊聊CarreraProducer的sendDelay

允我心安 提交于 2020-01-06 13:20:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 序 本文主要研究一下CarreraProducer的sendDelay ProducerInterface DDMQ/carrera-sdk/producer/java/carrera-producer-sdk/src/main/java/com/xiaojukeji/carrera/producer/ProducerInterface.java public interface ProducerInterface { void start() throws Exception; void shutdown(); Result sendMessage(Message message); Result send(String topic, byte[] body); Result send(String topic, String body); Result sendByCharset(String topic, String body, String charsetName); Result send(String topic, String body, String key, String... tags); Result send(String topic, byte[] body, String key,