前言
pipeline只有两种stage:stream和batch,主要看它的数据源是哪种,如果是StreamSource那就用StreamStage,如果是BatchSource那就用BatchStage。也可以通过 addTimestamps来把batch模拟成无边界流。
1. 避免事件乱序
为了避免乱序可以如下配置:
Pipeline p = Pipeline.create();
p.setPreserveOrder(true);
这样配置后,Jet会给这些消息打上同样的partitioning key。会影响性能。如果你无意中改了partitioning key就会影响事件的顺序。比如你从带有分区的kafka消费,然后用了groupingKey(这个key不是kafka的分区key),那么你就潜在的打乱了事件的顺序。
2.多数据源
如下:
Pipeline p = Pipeline.create();
BatchSource<String> leftSource = TestSources.items("the", "quick", "brown", "fox");
BatchSource<String> rightSource = TestSources.items("jumps", "over", "the", "lazy", "dog");
BatchStage<String> left = p.readFrom(leftSource);
BatchStage<String> right = p.readFrom(rightSource);
left.merge(right)
.writeTo(Sinks.logger());
3. 转换Transforms
Jet在数据源和目标数据中间有一层转换层,分为两类:
无状态转换:map,filter,flatMap,hashJoin
有状态转换:aggregate,rollingAggregate,distinct,window
4. 分布式内存数据结构
IMap: Hazelcast内置的,支持索引、查询、持久化,可以用在Jet的跑批和流式。
可以通过配置event journal来支持流式处理(支持Exactly-Once):
hazelcast:
map:
name_of_map:
event-journal:
enabled: true
capacity: 100000
time-to-live-seconds: 10
然后代码如下:
IMap<String, User> userCache = jet.getMap("usersCache")
Pipeline p = Pipeline.

本文详细介绍了Hazelcast Jet的数据处理流程,包括stream和batch阶段、事件顺序保证、多数据源集成、转换操作、分布式内存数据结构如IMap的使用、变更数据捕获(CDC)以及Pipeline的序列化。此外,还提到了Spring集成和SpringBoot应用中的实践方法。
最低0.47元/天 解锁文章
398

被折叠的 条评论
为什么被折叠?



