![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
flink
文章平均质量分 96
play maker
这个作者很懒,什么都没留下…
展开
-
Flink+Pulsar、Kafka问题分析及方案 -- 事务阻塞
跟kafka一样,可能会发生重启任务后并发度增大的情况,假设前面启动时的并发度为P1,当前启动的并发度为P2,因此前面的任务执行使用的ClientName范围为[0,P1 ),我们需要把这些ClientName对应的事务都abort一次,但是P1是不可知的。Flink从Checkpoint/Savepoint启动时,对于前面没完结的事务都会存储在Checkpoint/Savepoint里,启动时会调用recoverAndCommit/recoverAndAbort方法来处理掉,一般这是没啥问题的。原创 2023-05-18 18:02:05 · 1001 阅读 · 1 评论 -
FlinkKafkaProducer 源码分析
这里有一个问题需要解决的:由于不从checkpoint/savepoint中启动,因此我们无法得知之前启动时的并发度,假设前面启动时的并发度为P1,当前启动的并发度为P2,因此前面的任务执行使用的事务ID范围为[0,P1 * PoolSize),我们需要把这些事务ID都abort一次,但是P1是不可知的。因此我们还需要补充abort那些不在快照里的事务ID,因为Kafka connector的事务ID都是固定的,都在池子里存储着,而Context里存储了事务ID池子,因此恢复userContext后,原创 2023-05-18 17:50:51 · 688 阅读 · 0 评论 -
Flink+Pulsar、Kafka问题分析及方案 -- 幂等性
pulsar的transactionID是由broker分配的,不用用户设置,也没法设置;而kafka这里是用户设置的。kafka的ProducerID是由broker分配的,用户没法设置;但是pulsar的ProducerName是可以由用户设置的。kafka会复用transactionID,transactionID一个时刻对应一个事务,这个事务完成后可以复用这个transactionID开启下一个事务,broker会使用一个Map维护每个transactionID的元数据。原创 2023-04-24 15:50:13 · 1411 阅读 · 0 评论