Proje 2015 yılında başlamış ve ilk sürüm 2017 yılında yapılmış. IMDG ile bir sürü alt yapıyı paylaşıyor.
Aslında kısaca Stream Processing için kullanılıyor. Tanıtım sayfası dokümantasyon burada
Bazı basit kullanım örnekleri burada
Daha sonra Hazelcast Platform ortaya çıktı. Açıklaması şöyle. Ama ben bu yazıda Hazelcast Jet olarak yazmaya devam edeceğim.
What is Hazelcast Platform 5.0?
In the recent past, we observed emerging use cases that were a great fit for Hazelcast Jet such as digital integration hub or enrichment of streams of data with a static one. On the other hand, our world-class user base of Hazelcast IMDG continued to run the more traditional OLTP use cases.
Although Hazelcast Jet is built on top of Hazelcast IMDG, the split created massive confusion among our users about whether they should use IMDG or Jet in their particular case. In order to sort out this confusion, we decided to merge the Hazelcast IMDG and Hazelcast Jet products into a single one, simply named Hazelcast Platform.
In short, Hazelcast 5.0 can be thought of as a successor of Hazelcast IMDG 4.2 with added all the streaming and pipeline capabilities of Hazelcast Jet 4.5.
As a side note, you might come across the term “Hazelcast Platform” on our website and marketing materials. It’s a synonym for the newly merged Hazelcast 5.0+ product and is used in places where we need to distinguish between Hazelcast “the product” and Hazelcast “the company”.
Jet Job Command Pattern
Jet Job'ları çalıştırmak için Command Pattern uygulanıyor. Bunlara Operation deniliyor. Tüm sınıflar burada. Mesela bunlardan birisi SubmitJobOperation. Bir diğeri TerminateJobOperation
Bütün operation veya command'ler JobCoordinationService nesnesini çağırıyor
Job Submit
Pipeline'nın çalışan haline job deniyor. Bir Job sadece bir kere çalıştırılmalı
Task Parallelism Nedir?
Elimizde şöyle bir kod olsun
Pipeline p = Pipeline.create(); p.readFrom(Sources.<Long, String>map(BOOK_LINES)) .flatMap(line -> traverseArray(line.getValue().split("\\W+"))) .filter(word -> !word.isEmpty()) .groupingKey(wholeItem()) .aggregate(counting()) .writeTo(Sinks.map(COUNTS));
Bu kod daha küçük Task'lara bölünerek şu hale gelir
İş çalışırken DAG olarak şunu görürüz. İlk olarak DAG'taki düğümler tanımlanır. localParallelism ile kaç tane worker tanımlandığını görürüz.
digraph DAG {
"filesSource(/*)" [localParallelism=1];
"fused(flat-map, filter)" [localParallelism=2];
"group-and-aggregate-prepare" [localParallelism=2];
"group-and-aggregate" [localParallelism=2];
"loggerSink" [localParallelism=1];
"filesSource(/*)" -> "fused(flat-map, filter)" [queueSize=1024];
"fused(flat-map, filter)" -> "group-and-aggregate-prepare"
[label="partitioned", queueSize=1024];
subgraph cluster_0 {
"group-and-aggregate-prepare" -> "group-and-aggregate"
[label="distributed-partitioned", queueSize=1024];
}
"group-and-aggregate" -> "loggerSink" [queueSize=1024];
}
Data Parallelism Nedir?
DataSource'un farklı kısımlarının farklı cluster üyesi tarafından işlenmesi demek. Şeklen şöyle
Neticede elimize streaming yapısı geçiyor. Şeklen şöyle
Jet Pipeline Execution Model
Hazelcast Jet Pipeline Execution Model yazısına taşıdım
Serialization of Data Types
Serialization of Data Types yazısına taşıdım
Serialization Of Pipeline
Pipeline içindeki nesnelerin başka bilgisayarlara dağıtılabilmesi için serializable olması gerekiyor. Lambda için açıklama şöyle
A typical Jet pipeline involves lambda expressions. Since the whole pipeline definition must be serialized to be sent to the cluster, the lambda expressions must be serializable as well. The Java standard provides an essential building block: if the static type of the lambda is a subtype of Serializable you will automatically get a lambda instance that can serialize itself.
None of the functional interfaces in the JDK extend Serializable so we had to mirror the entire java.util.function package in our own com.hazelcast.function with all the interfaces subtyped and made Serializable. Each subtype has the name of the original with Ex appended. For example, a FunctionEx is just like Function but implements Serializable. We use these types everywhere in the Pipeline API.
Jet Fault Tolerance
Jet Fault Tolerance yazısına taşıdım
Hiç yorum yok:
Yorum Gönder