You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2020/01/30 13:13:54 UTC

[ignite-extensions] 04/19: IGNITE-12356 Migrate Flink module to ignite-extensions - Fixes #1.

This is an automated email from the ASF dual-hosted git repository.

nizhikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite-extensions.git

commit 02a1b2ab929e0f9b8f7f3167c05dad6e7fad0c27
Author: samaitra <sa...@gmail.com>
AuthorDate: Sat Dec 28 14:09:57 2019 -0600

    IGNITE-12356 Migrate Flink module to ignite-extensions - Fixes #1.
    
    Signed-off-by: samaitra <sa...@gmail.com>
---
 README.md                                          |   87 ++
 checkstyle/checkstyle-suppressions.xml             |   27 +
 checkstyle/checkstyle.xml                          |   56 +
 config/example-ignite.xml                          |   73 ++
 modules/flink-ext/README.txt                       |   33 +
 modules/flink-ext/config/example-ignite.xml        |   73 ++
 modules/flink-ext/licenses/apache-2.0.txt          |  202 +++
 modules/flink-ext/pom.xml                          |  198 +++
 .../org/apache/ignite/sink/flink/IgniteSink.java   |  197 +++
 .../org/apache/ignite/sink/flink/package-info.java |   22 +
 .../apache/ignite/source/flink/IgniteSource.java   |  223 ++++
 .../ignite/source/flink/TaskRemoteFilter.java      |   60 +
 .../apache/ignite/source/flink/package-info.java   |   21 +
 .../ignite/sink/flink/FlinkIgniteSinkSelfTest.java |   86 ++
 .../sink/flink/FlinkIgniteSinkSelfTestSuite.java   |   29 +
 .../source/flink/FlinkIgniteSourceSelfTest.java    |  139 ++
 .../flink/FlinkIgniteSourceSelfTestSuite.java      |   30 +
 parent/pom.xml                                     | 1336 ++++++++++++++++++++
 pom.xml                                            |  416 ++++++
 19 files changed, 3308 insertions(+)

diff --git a/README.md b/README.md
index e69de29..345f12a 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,87 @@
+# Apache Ignite
+
+<a href="https://ignite.apache.org/"><img src="https://ignite.apache.org/images/logo3.png" hspace="20"/></a>
+
+<a href="https://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_RunAll&branch_IgniteTests24Java8=%3Cdefault%3E"><img src="https://ci.ignite.apache.org/app/rest/builds/buildType:(id:IgniteTests24Java8_RunAll)/statusIcon.svg"/></a>
+
+
+## Getting Started
+
+For information on how to get started with Apache Ignite, please visit: [Getting Started][getting-started].
+
+## Full Documentation
+
+You can find the full Apache Ignite documentation here: [Full documentation][docs].
+
+
+## What is Apache Ignite?
+
+[Apache Ignite][apache-ignite-homepage] is a memory-centric distributed <strong>database</strong>, <strong>caching</strong>,
+ and <strong>processing</strong> platform for transactional, analytical, and streaming workloads delivering in-memory
+ speeds at petabyte scale.
+
+<p align="center">
+    <a href="https://ignite.apache.org/whatisignite.html">
+        <img src="https://ignite.apache.org/images/ignite_architecture.png" width="400px"/>
+    </a>
+</p>
+
+## Memory-Centric Storage
+Apache Ignite is based on distributed memory-centric architecture that combines the performance and scale of in-memory
+computing together with the disk durability and strong consistency in one system.
+
+The main difference between the memory-centric approach and the traditional disk-centric approach is that the memory
+is treated as a fully functional storage, not just as a caching layer, like most databases do.
+For example, Apache Ignite can function in a pure in-memory mode, in which case it can be treated as an
+In-Memory Database (IMDB) and In-Memory Data Grid (IMDG) in one.
+
+On the other hand, when persistence is turned on, Ignite begins to function as a memory-centric system where most of
+the processing happens in memory, but the data and indexes get persisted to disk. The main difference here
+from the traditional disk-centric RDBMS or NoSQL system is that Ignite is strongly consistent, horizontally
+scalable, and supports both SQL and key-value processing APIs.
+
+[Read More](https://ignite.apache.org/arch/memorycentric.html)
+
+## Ignite Persistence
+
+Ignite Native Persistence is a distributed, ACID, and SQL-compliant **disk store** that transparently integrates with
+Ignite memory-centric storage as an optional disk layer storing data and indexes on SSD,
+ Flash, 3D XPoint, and other types of non-volatile storages.
+
+With the Ignite Persistence enabled, you no longer need to keep all the data and indexes in memory or warm it
+up after a node or cluster restart because the Durable Memory is tightly coupled with persistence and treats
+it as a secondary memory tier. This implies that if a subset of data or an index is missing in RAM,
+the Durable Memory will take it from the disk.
+
+<p align="center">
+    <a href="https://apacheignite.readme.io/docs/distributed-persistent-store">
+        <img src="https://ignite.apache.org/images/native_persistence.png?renew" width="400px"/>
+    </a>
+</p>
+
+[Read More](https://ignite.apache.org/arch/persistence.html)
+
+## ACID Compliance
+Data stored in Ignite is ACID-compliant both in memory and on disk, making Ignite a **strongly consistent** system. Ignite transactions work across the network and can span multiple servers.
+
+[Read More](https://apacheignite.readme.io/docs/transactions)
+
+## Complete SQL Support
+Ignite provides full support for SQL, DDL and DML, allowing users to interact with Ignite using pure SQL without writing any code. This means that users can create tables and indexes as well as insert, update, and query data using only SQL. Having such complete SQL support makes Ignite a one-of-a-kind **distributed SQL database**.
+
+[Read More](https://apacheignite.readme.io/docs/distributed-sql)
+
+## Key-Value
+The in-memory data grid component in Ignite is a fully transactional **distributed key-value store** that can scale horizontally across 100s of servers in the cluster. When persistence is enabled, Ignite can also store more data than fits in memory and survive full cluster restarts.
+
+[Read More](https://apacheignite.readme.io/docs/data-grid)
+
+## Collocated Processing
+Most traditional databases work in a client-server fashion, meaning that data must be brought to the client side for processing. This approach requires lots of data movement from servers to clients and generally does not scale. Ignite, on the other hand, allows for sending light-weight computations to the data, i.e. **collocating** computations with data. As a result, Ignite scales better and minimizes data movement.
+
+[Read More](https://apacheignite.readme.io/docs/collocate-compute-and-data)
+
+## Scalability and Durability
+Ignite is an elastic, horizontally scalable distributed system that supports adding and removing cluster nodes on demand. Ignite also allows for storing multiple copies of the data, making it resilient to partial cluster failures. If the persistence is enabled, then data stored in Ignite will also survive full cluster failures. Cluster restarts in Ignite can be very fast, as the data becomes operational instantaneously directly from disk. As a result, the data does not need to be preload [...]
+
+[Read More](https://apacheignite.readme.io/docs/clustering)
\ No newline at end of file
diff --git a/checkstyle/checkstyle-suppressions.xml b/checkstyle/checkstyle-suppressions.xml
new file mode 100644
index 0000000..3f593f9
--- /dev/null
+++ b/checkstyle/checkstyle-suppressions.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!DOCTYPE suppressions PUBLIC
+    "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
+    "https://checkstyle.org/dtds/suppressions_1_2.dtd">
+<suppressions>
+    <suppress checks="EmptyLineSeparator" files="BCrypt\.java|ConcurrentLinkedDeque8\.java"/>
+
+    <suppress checks="EmptyLineSeparator" files="XGBoostModelLexer\.java|XGBoostModelParser\.java"/>
+</suppressions>
diff --git a/checkstyle/checkstyle.xml b/checkstyle/checkstyle.xml
new file mode 100644
index 0000000..5d9061b
--- /dev/null
+++ b/checkstyle/checkstyle.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
+    "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
+<module name="Checker">
+    <property name="charset" value="UTF-8"/>
+
+    <property name="fileExtensions" value="java, properties, xml"/>
+
+    <!-- Whitespaces Checks. See: http://checkstyle.sourceforge.net/config_whitespace.html -->
+    <module name="FileTabCharacter">
+        <property name="eachLine" value="true"/>
+    </module>
+
+    <!-- Misc Checks. See: http://checkstyle.sourceforge.net/config_misc.html -->
+    <module name="NewlineAtEndOfFile"/>
+
+    <module name="TreeWalker">
+        <!-- Import Checks. See: http://checkstyle.sourceforge.net/config_imports.html -->
+        <module name="RedundantImport"/>
+        <module name="UnusedImports"/>
+
+        <!--Modifiers Checks. See: http://checkstyle.sourceforge.net/config_modifier.html-->
+        <module name="ModifierOrder"/>
+
+        <!--Annotation checks. See: http://checkstyle.sourceforge.net/config_annotation.html-->
+        <module name="MissingOverride"/>
+
+        <!-- Empty line checks. See: http://checkstyle.sourceforge.net/config_whitespace.html#EmptyLineSeparator -->
+        <module name="EmptyLineSeparator">
+            <!-- PACKAGE_DEF excluded according to Ignite code style. -->
+            <property name="tokens" value="IMPORT, STATIC_IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF, STATIC_INIT,
+                INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF" />
+
+            <property name="allowMultipleEmptyLines" value="false" />
+            <property name="allowMultipleEmptyLinesInsideClassMembers" value="false" />
+        </module>
+    </module>
+</module>
diff --git a/config/example-ignite.xml b/config/example-ignite.xml
new file mode 100644
index 0000000..d4f4dc1
--- /dev/null
+++ b/config/example-ignite.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+    Ignite configuration with all defaults and enabled events.
+    Used for testing IgniteSink running Ignite in a client mode.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/util
+        http://www.springframework.org/schema/util/spring-util.xsd">
+    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
+        <!-- Enable client mode. -->
+        <property name="clientMode" value="false"/>
+
+        <!-- Cache accessed from IgniteSink. -->
+        <property name="cacheConfiguration">
+            <list>
+                <!-- Partitioned cache example configuration with configurations adjusted to server nodes'. -->
+                <bean class="org.apache.ignite.configuration.CacheConfiguration">
+                    <property name="atomicityMode" value="ATOMIC"/>
+                    <property name="name" value="testCache"/>
+                </bean>
+            </list>
+        </property>
+
+        <!-- Enable cache events. -->
+        <property name="includeEventTypes">
+            <list>
+                <!-- Cache events (only EVT_CACHE_OBJECT_PUT for tests). -->
+                <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_PUT"/>
+                <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_READ"/>
+                <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_REMOVED"/>
+
+            </list>
+        </property>
+
+        <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
+        <property name="discoverySpi">
+            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
+                <property name="ipFinder">
+                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
+                        <property name="addresses">
+                            <list>
+                                <value>127.0.0.1:47500..47509</value>
+                            </list>
+                        </property>
+                    </bean>
+                </property>
+            </bean>
+        </property>
+    </bean>
+</beans>
diff --git a/modules/flink-ext/README.txt b/modules/flink-ext/README.txt
new file mode 100644
index 0000000..a198b1b
--- /dev/null
+++ b/modules/flink-ext/README.txt
@@ -0,0 +1,33 @@
+Apache Ignite Flink Sink Module
+-----------------------------------
+
+Apache Ignite Flink Sink module is a streaming connector to inject Flink data into Ignite cache.
+
+Starting data transfer to Ignite can be done with the following steps.
+
+1. Import Ignite Flink Sink Module in Maven Project
+
+If you are using Maven to manage dependencies of your project, you can add Flink module
+dependency like this (replace '${ignite.version}' with actual Ignite version you are
+interested in):
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                        http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    ...
+    <dependencies>
+        ...
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-flink</artifactId>
+            <version>${ignite.version}</version>
+        </dependency>
+        ...
+    </dependencies>
+    ...
+</project>
+
+2. Create an Ignite configuration file (see example-ignite.xml) and make sure it is accessible from the sink.
+
+3. Make sure your data input to the sink is specified. For example `input.addSink(igniteSinkObject)`
diff --git a/modules/flink-ext/config/example-ignite.xml b/modules/flink-ext/config/example-ignite.xml
new file mode 100644
index 0000000..d4f4dc1
--- /dev/null
+++ b/modules/flink-ext/config/example-ignite.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+    Ignite configuration with all defaults and enabled events.
+    Used for testing IgniteSink running Ignite in a client mode.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/util
+        http://www.springframework.org/schema/util/spring-util.xsd">
+    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
+        <!-- Enable client mode. -->
+        <property name="clientMode" value="false"/>
+
+        <!-- Cache accessed from IgniteSink. -->
+        <property name="cacheConfiguration">
+            <list>
+                <!-- Partitioned cache example configuration with configurations adjusted to server nodes'. -->
+                <bean class="org.apache.ignite.configuration.CacheConfiguration">
+                    <property name="atomicityMode" value="ATOMIC"/>
+                    <property name="name" value="testCache"/>
+                </bean>
+            </list>
+        </property>
+
+        <!-- Enable cache events. -->
+        <property name="includeEventTypes">
+            <list>
+                <!-- Cache events (only EVT_CACHE_OBJECT_PUT for tests). -->
+                <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_PUT"/>
+                <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_READ"/>
+                <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_REMOVED"/>
+
+            </list>
+        </property>
+
+        <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
+        <property name="discoverySpi">
+            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
+                <property name="ipFinder">
+                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
+                        <property name="addresses">
+                            <list>
+                                <value>127.0.0.1:47500..47509</value>
+                            </list>
+                        </property>
+                    </bean>
+                </property>
+            </bean>
+        </property>
+    </bean>
+</beans>
diff --git a/modules/flink-ext/licenses/apache-2.0.txt b/modules/flink-ext/licenses/apache-2.0.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/modules/flink-ext/licenses/apache-2.0.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/modules/flink-ext/pom.xml b/modules/flink-ext/pom.xml
new file mode 100644
index 0000000..08b4be7
--- /dev/null
+++ b/modules/flink-ext/pom.xml
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+    POM file.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.ignite</groupId>
+        <artifactId>ignite-parent</artifactId>
+        <version>1</version>
+        <relativePath>../../parent</relativePath>
+    </parent>
+
+    <artifactId>ignite-flink-ext</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <url>http://ignite.apache.org</url>
+
+    <properties>
+        <ignite-core.version>2.9.0-SNAPSHOT</ignite-core.version>
+        <ignite-log4j.version>2.9.0-SNAPSHOT</ignite-log4j.version>
+        <ignite-spring.version>2.9.0-SNAPSHOT</ignite-spring.version>
+        <flink.version>1.5.0</flink.version>
+        <kryo-serializers.version>0.42</kryo-serializers.version>
+
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-core</artifactId>
+            <version>${ignite-core.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.flink</groupId>
+            <artifactId>flink-java</artifactId>
+            <version>${flink.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-log4j12</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>commons-logging</groupId>
+                    <artifactId>commons-logging</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-simple</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.zookeeper</groupId>
+                    <artifactId>zookeeper</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>commons-beanutils</groupId>
+                    <artifactId>commons-beanutils</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>commons-beanutils</groupId>
+                    <artifactId>commons-beanutils-bean-collections</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>commons-codec</groupId>
+                    <artifactId>commons-codec</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.flink</groupId>
+            <artifactId>flink-streaming-java_2.11</artifactId>
+            <version>${flink.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-log4j12</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>commons-logging</groupId>
+                    <artifactId>commons-logging</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-simple</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.zookeeper</groupId>
+                    <artifactId>zookeeper</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.flink</groupId>
+            <artifactId>flink-clients_2.11</artifactId>
+            <version>${flink.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-log4j12</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>commons-logging</groupId>
+                    <artifactId>commons-logging</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-simple</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.zookeeper</groupId>
+                    <artifactId>zookeeper</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.flink</groupId>
+            <artifactId>flink-test-utils_2.11</artifactId>
+            <version>${flink.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-core</artifactId>
+            <version>${ignite-core.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-log4j</artifactId>
+            <version>${ignite-log4j.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-spring</artifactId>
+            <version>${ignite-spring.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <version>${mockito.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/modules/flink-ext/src/main/java/org/apache/ignite/sink/flink/IgniteSink.java b/modules/flink-ext/src/main/java/org/apache/ignite/sink/flink/IgniteSink.java
new file mode 100644
index 0000000..8deb0d7
--- /dev/null
+++ b/modules/flink-ext/src/main/java/org/apache/ignite/sink/flink/IgniteSink.java
@@ -0,0 +1,197 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.sink.flink;
+
+import java.util.Map;
+import org.apache.flink.configuration.Configuration;
+import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteDataStreamer;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.IgniteIllegalStateException;
+import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.internal.util.typedef.internal.A;
+
+/**
+ * Apache Flink Ignite sink implemented as a RichSinkFunction.
+ */
+public class IgniteSink<IN> extends RichSinkFunction<IN> {
+    /** Default flush frequency. */
+    private static final long DFLT_FLUSH_FREQ = 10000L;
+
+    /** Logger. */
+    private transient IgniteLogger log;
+
+    /** Automatic flush frequency. */
+    private long autoFlushFrequency = DFLT_FLUSH_FREQ;
+
+    /** Enables overwriting existing values in cache. */
+    private boolean allowOverwrite = false;
+
+    /** Flag for stopped state. */
+    private volatile boolean stopped = true;
+
+    /** Ignite instance. */
+    protected transient Ignite ignite;
+
+    /** Ignite Data streamer instance. */
+    protected transient IgniteDataStreamer streamer;
+
+    /** Ignite grid configuration file. */
+    protected final String igniteCfgFile;
+
+    /** Cache name. */
+    protected final String cacheName;
+
+    /**
+     * Gets the cache name.
+     *
+     * @return Cache name.
+     */
+    public String getCacheName() {
+        return cacheName;
+    }
+
+    /**
+     * Gets Ignite configuration file.
+     *
+     * @return Configuration file.
+     */
+    public String getIgniteConfigFile() {
+        return igniteCfgFile;
+    }
+
+    /**
+     * Gets the Ignite instance.
+     *
+     * @return Ignite instance.
+     */
+    public Ignite getIgnite() {
+        return ignite;
+    }
+
+    /**
+     * Obtains data flush frequency.
+     *
+     * @return Flush frequency.
+     */
+    public long getAutoFlushFrequency() {
+        return autoFlushFrequency;
+    }
+
+    /**
+     * Specifies data flush frequency into the grid.
+     *
+     * @param autoFlushFrequency Flush frequency.
+     */
+    public void setAutoFlushFrequency(long autoFlushFrequency) {
+        this.autoFlushFrequency = autoFlushFrequency;
+    }
+
+    /**
+     * Obtains flag for enabling overwriting existing values in cache.
+     *
+     * @return True if overwriting is allowed, false otherwise.
+     */
+    public boolean getAllowOverwrite() {
+        return allowOverwrite;
+    }
+
+    /**
+     * Enables overwriting existing values in cache.
+     *
+     * @param allowOverwrite Flag value.
+     */
+    public void setAllowOverwrite(boolean allowOverwrite) {
+        this.allowOverwrite = allowOverwrite;
+    }
+
+    /**
+     * Default IgniteSink constructor.
+     *
+     * @param cacheName Cache name.
+     */
+    public IgniteSink(String cacheName, String igniteCfgFile) {
+        this.cacheName = cacheName;
+        this.igniteCfgFile = igniteCfgFile;
+    }
+
+    /**
+     * Starts streamer.
+     *
+     * @throws IgniteException If failed.
+     */
+    @Override
+    public void open(Configuration parameter) {
+        A.notNull(igniteCfgFile, "Ignite config file");
+        A.notNull(cacheName, "Cache name");
+
+        try {
+            // if an ignite instance is already started in same JVM then use it.
+            this.ignite = Ignition.ignite();
+        } catch (IgniteIllegalStateException e) {
+            this.ignite = Ignition.start(igniteCfgFile);
+        }
+
+        this.ignite.getOrCreateCache(cacheName);
+
+        this.log = this.ignite.log();
+
+        this.streamer = this.ignite.dataStreamer(cacheName);
+        this.streamer.autoFlushFrequency(autoFlushFrequency);
+        this.streamer.allowOverwrite(allowOverwrite);
+
+        stopped = false;
+    }
+
+    /**
+     * Stops streamer.
+     *
+     * @throws IgniteException If failed.
+     */
+    @Override
+    public void close() {
+        if (stopped)
+            return;
+
+        stopped = true;
+
+        this.streamer.close();
+    }
+
+    /**
+     * Transfers data into grid. It is called when new data
+     * arrives to the sink, and forwards it to {@link IgniteDataStreamer}.
+     *
+     * @param in IN.
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void invoke(IN in) {
+        try {
+            if (!(in instanceof Map))
+                throw new IgniteException("Map as a streamer input is expected!");
+
+            this.streamer.addData((Map)in);
+        }
+        catch (Exception e) {
+            log.error("Error while processing IN of " + cacheName, e);
+        }
+    }
+}
diff --git a/modules/flink-ext/src/main/java/org/apache/ignite/sink/flink/package-info.java b/modules/flink-ext/src/main/java/org/apache/ignite/sink/flink/package-info.java
new file mode 100644
index 0000000..7b1437c
--- /dev/null
+++ b/modules/flink-ext/src/main/java/org/apache/ignite/sink/flink/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * <!-- Package description. -->
+ * IgniteSink -- streaming connector integration with Apache Flink.
+ */
+package org.apache.ignite.sink.flink;
diff --git a/modules/flink-ext/src/main/java/org/apache/ignite/source/flink/IgniteSource.java b/modules/flink-ext/src/main/java/org/apache/ignite/source/flink/IgniteSource.java
new file mode 100644
index 0000000..2dd670a
--- /dev/null
+++ b/modules/flink-ext/src/main/java/org/apache/ignite/source/flink/IgniteSource.java
@@ -0,0 +1,223 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.source.flink;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+import org.apache.flink.streaming.api.functions.source.RichParallelSourceFunction;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.events.CacheEvent;
+import org.apache.ignite.internal.util.typedef.X;
+import org.apache.ignite.internal.util.typedef.internal.A;
+import org.apache.ignite.lang.IgniteBiPredicate;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.resources.IgniteInstanceResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Apache Flink Ignite source implemented as a RichParallelSourceFunction.
+ */
+public class IgniteSource extends RichParallelSourceFunction<CacheEvent> {
+    /** Serial version uid. */
+    private static final long serialVersionUID = 1L;
+
+    /** Logger. */
+    private static final Logger log = LoggerFactory.getLogger(IgniteSource.class);
+
+    /** Default max number of events taken from the buffer at once. */
+    private static final int DFLT_EVT_BATCH_SIZE = 1;
+
+    /** Default number of milliseconds timeout for event buffer queue operation. */
+    private static final int DFLT_EVT_BUFFER_TIMEOUT = 10;
+
+    /** Event buffer. */
+    private BlockingQueue<CacheEvent> evtBuf = new LinkedBlockingQueue<>();
+
+    /** Remote Listener id. */
+    private UUID rmtLsnrId;
+
+    /** Flag for isRunning state. */
+    private volatile boolean isRunning;
+
+    /** Max number of events taken from the buffer at once. */
+    private int evtBatchSize = DFLT_EVT_BATCH_SIZE;
+
+    /** Number of milliseconds timeout for event buffer queue operation. */
+    private int evtBufTimeout = DFLT_EVT_BUFFER_TIMEOUT;
+
+    /** Local listener. */
+    private final TaskLocalListener locLsnr = new TaskLocalListener();
+
+    /** Ignite instance. */
+    @IgniteInstanceResource
+    private transient Ignite ignite;
+
+    /** Cache name. */
+    private final String cacheName;
+
+    /**
+     * Sets Ignite instance.
+     *
+     * @param ignite Ignite instance.
+     */
+    public void setIgnite(Ignite ignite) {
+        this.ignite = ignite;
+    }
+
+    /**
+     * Sets Event Batch Size.
+     *
+     * @param evtBatchSize Event Batch Size.
+     */
+    public void setEvtBatchSize(int evtBatchSize) {
+        this.evtBatchSize = evtBatchSize;
+    }
+
+    /**
+     * Sets Event Buffer timeout.
+     *
+     * @param evtBufTimeout Event Buffer timeout.
+     */
+    public void setEvtBufTimeout(int evtBufTimeout) {
+        this.evtBufTimeout = evtBufTimeout;
+    }
+
+    /**
+     * @return Local Task Listener
+     */
+    TaskLocalListener getLocLsnr() {
+        return locLsnr;
+    }
+
+    /**
+     * Default IgniteSource constructor.
+     *
+     * @param cacheName Cache name.
+     */
+    public IgniteSource(String cacheName) {
+        this.cacheName = cacheName;
+    }
+
+    /**
+     * Starts Ignite source.
+     *
+     * @param filter User defined filter.
+     * @param cacheEvts Converts comma-delimited cache events strings to Ignite internal representation.
+     */
+    @SuppressWarnings("unchecked")
+    public void start(IgnitePredicate<CacheEvent> filter, int... cacheEvts) {
+        A.notNull(cacheName, "Cache name");
+
+        TaskRemoteFilter rmtLsnr = new TaskRemoteFilter(cacheName, filter);
+
+        try {
+            synchronized (this) {
+                if (isRunning)
+                    return;
+
+                isRunning = true;
+
+                rmtLsnrId = ignite.events(ignite.cluster().forCacheNodes(cacheName))
+                    .remoteListen(locLsnr, rmtLsnr, cacheEvts);
+            }
+        }
+        catch (IgniteException e) {
+            log.error("Failed to register event listener!", e);
+
+            throw e;
+        }
+    }
+
+    /**
+     * Transfers data from grid.
+     *
+     * @param ctx SourceContext.
+     */
+    @Override public void run(SourceContext<CacheEvent> ctx) {
+        List<CacheEvent> evts = new ArrayList<>(evtBatchSize);
+
+        try {
+            while (isRunning) {
+                // block here for some time if there is no events from source
+                CacheEvent firstEvt = evtBuf.poll(1, TimeUnit.SECONDS);
+
+                if (firstEvt != null)
+                    evts.add(firstEvt);
+
+                if (evtBuf.drainTo(evts, evtBatchSize) > 0) {
+                    synchronized (ctx.getCheckpointLock()) {
+                        for (CacheEvent evt : evts)
+                            ctx.collect(evt);
+
+                        evts.clear();
+                    }
+                }
+            }
+        }
+        catch (Exception e) {
+            if (X.hasCause(e, InterruptedException.class))
+                return; // Executing thread can be interrupted see cancel() javadoc.
+
+            log.error("Error while processing cache event of " + cacheName, e);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public void cancel() {
+        synchronized (this) {
+            if (!isRunning)
+                return;
+
+            isRunning = false;
+
+            if (rmtLsnrId != null && ignite != null) {
+                ignite.events(ignite.cluster().forCacheNodes(cacheName))
+                    .stopRemoteListen(rmtLsnrId);
+
+                rmtLsnrId = null;
+            }
+        }
+    }
+
+    /**
+     * Local listener buffering cache events to be further sent to Flink.
+     */
+    private class TaskLocalListener implements IgniteBiPredicate<UUID, CacheEvent> {
+        /** {@inheritDoc} */
+        @Override public boolean apply(UUID id, CacheEvent evt) {
+            try {
+                if (!evtBuf.offer(evt, evtBufTimeout, TimeUnit.MILLISECONDS))
+                    log.error("Failed to buffer event {}", evt.name());
+            }
+            catch (InterruptedException ignored) {
+                log.error("Failed to buffer event using local task listener {}", evt.name());
+
+                Thread.currentThread().interrupt(); // Restore interrupt flag.
+            }
+
+            return true;
+        }
+    }
+}
+
diff --git a/modules/flink-ext/src/main/java/org/apache/ignite/source/flink/TaskRemoteFilter.java b/modules/flink-ext/src/main/java/org/apache/ignite/source/flink/TaskRemoteFilter.java
new file mode 100644
index 0000000..4c89d25
--- /dev/null
+++ b/modules/flink-ext/src/main/java/org/apache/ignite/source/flink/TaskRemoteFilter.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.source.flink;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.cache.affinity.Affinity;
+import org.apache.ignite.events.CacheEvent;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.resources.IgniteInstanceResource;
+
+/**
+ * Remote filter.
+ */
+public class TaskRemoteFilter implements IgnitePredicate<CacheEvent> {
+    /** Serial version Id. */
+    private static final long serialVersionUID = 1L;
+
+    /** Ignite Instance Resource. */
+    @IgniteInstanceResource
+    private Ignite ignite;
+
+    /** Cache name. */
+    private final String cacheName;
+
+    /** User-defined filter. */
+    private final IgnitePredicate<CacheEvent> filter;
+
+    /**
+     * @param cacheName Cache name.
+     * @param filter IgnitePredicate.
+     */
+    TaskRemoteFilter(String cacheName, IgnitePredicate<CacheEvent> filter) {
+        this.cacheName = cacheName;
+        this.filter = filter;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean apply(CacheEvent evt) {
+        Affinity<Object> affinity = ignite.affinity(cacheName);
+
+        // Process this event. Ignored on backups.
+        return affinity.isPrimary(ignite.cluster().localNode(), evt.key()) &&
+                (filter == null || filter.apply(evt));
+    }
+}
diff --git a/modules/flink-ext/src/main/java/org/apache/ignite/source/flink/package-info.java b/modules/flink-ext/src/main/java/org/apache/ignite/source/flink/package-info.java
new file mode 100644
index 0000000..adc33fc
--- /dev/null
+++ b/modules/flink-ext/src/main/java/org/apache/ignite/source/flink/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * IgniteSource -- source connector integration with Apache Flink.
+ */
+package org.apache.ignite.source.flink;
diff --git a/modules/flink-ext/src/test/java/org/apache/ignite/sink/flink/FlinkIgniteSinkSelfTest.java b/modules/flink-ext/src/test/java/org/apache/ignite/sink/flink/FlinkIgniteSinkSelfTest.java
new file mode 100644
index 0000000..14798ed
--- /dev/null
+++ b/modules/flink-ext/src/test/java/org/apache/ignite/sink/flink/FlinkIgniteSinkSelfTest.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.sink.flink;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.flink.configuration.Configuration;
+import org.apache.flink.streaming.api.datastream.DataStream;
+import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * Tests for {@link IgniteSink}.
+ */
+public class FlinkIgniteSinkSelfTest {
+    /** Cache name. */
+    private static final String TEST_CACHE = "testCache";
+
+    /** Ignite test configuration file. */
+    private static final String GRID_CONF_FILE = "config/example-ignite.xml";
+
+    @Test
+    public void testIgniteSink() throws Exception {
+        Configuration configuration = new Configuration();
+
+        IgniteSink igniteSink = new IgniteSink(TEST_CACHE, GRID_CONF_FILE);
+
+        igniteSink.setAllowOverwrite(true);
+
+        igniteSink.setAutoFlushFrequency(1L);
+
+        igniteSink.open(configuration);
+
+        Map<String, String> myData = new HashMap<>();
+        myData.put("testData", "testValue");
+
+        igniteSink.invoke(myData);
+
+        /** waiting for a small duration for the cache flush to complete */
+        Thread.sleep(2000);
+
+        assertEquals("testValue", igniteSink.getIgnite().getOrCreateCache(TEST_CACHE).get("testData"));
+    }
+
+    @Test
+    public void testIgniteSinkStreamExecution() throws Exception {
+        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+        IgniteSink igniteSink = new IgniteSink(TEST_CACHE, GRID_CONF_FILE);
+
+        igniteSink.setAllowOverwrite(true);
+
+        igniteSink.setAutoFlushFrequency(1);
+
+        Map<String, String> myData = new HashMap<>();
+        myData.put("testdata", "testValue");
+        DataStream<Map> stream = env.fromElements(myData);
+
+        stream.addSink(igniteSink);
+        try {
+            env.execute();
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+            fail("Stream execution process failed.");
+        }
+    }
+}
diff --git a/modules/flink-ext/src/test/java/org/apache/ignite/sink/flink/FlinkIgniteSinkSelfTestSuite.java b/modules/flink-ext/src/test/java/org/apache/ignite/sink/flink/FlinkIgniteSinkSelfTestSuite.java
new file mode 100644
index 0000000..7890e4c
--- /dev/null
+++ b/modules/flink-ext/src/test/java/org/apache/ignite/sink/flink/FlinkIgniteSinkSelfTestSuite.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.sink.flink;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * Apache Flink sink tests.
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({FlinkIgniteSinkSelfTest.class})
+public class FlinkIgniteSinkSelfTestSuite {
+}
diff --git a/modules/flink-ext/src/test/java/org/apache/ignite/source/flink/FlinkIgniteSourceSelfTest.java b/modules/flink-ext/src/test/java/org/apache/ignite/source/flink/FlinkIgniteSourceSelfTest.java
new file mode 100644
index 0000000..7097132
--- /dev/null
+++ b/modules/flink-ext/src/test/java/org/apache/ignite/source/flink/FlinkIgniteSourceSelfTest.java
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.source.flink;
+
+import java.util.UUID;
+import org.apache.flink.api.common.functions.RuntimeContext;
+import org.apache.flink.streaming.api.functions.source.SourceFunction;
+import org.apache.flink.streaming.api.operators.StreamingRuntimeContext;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCluster;
+import org.apache.ignite.IgniteEvents;
+import org.apache.ignite.cluster.ClusterGroup;
+import org.apache.ignite.events.CacheEvent;
+import org.apache.ignite.events.EventType;
+import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.util.lang.GridAbsPredicate;
+import org.apache.ignite.lang.IgniteBiPredicate;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * Tests for {@link IgniteSource}.
+ */
+public class FlinkIgniteSourceSelfTest {
+    /** Cache name. */
+    private static final String TEST_CACHE = "testCache";
+
+    /** Flink source context. */
+    private SourceFunction.SourceContext<CacheEvent> ctx;
+
+    /** Ignite instance. */
+    private Ignite ignite;
+
+    /** Cluster Group */
+    private ClusterGroup clsGrp;
+
+    /** Ignite Source instance */
+    private IgniteSource igniteSrc;
+
+    /** */
+    @SuppressWarnings("unchecked")
+    @Before
+    public void setUpTest() throws Exception {
+        ctx = mock(SourceFunction.SourceContext.class);
+        ignite = mock(Ignite.class);
+        clsGrp = mock(ClusterGroup.class);
+
+        IgniteEvents igniteEvts = mock(IgniteEvents.class);
+        IgniteCluster igniteCluster = mock(IgniteCluster.class);
+        TaskRemoteFilter taskRemoteFilter = mock(TaskRemoteFilter.class);
+
+        when(ctx.getCheckpointLock()).thenReturn(new Object());
+        when(ignite.events(clsGrp)).thenReturn(igniteEvts);
+        when(ignite.cluster()).thenReturn(igniteCluster);
+
+        igniteSrc = new IgniteSource(TEST_CACHE);
+        igniteSrc.setIgnite(ignite);
+        igniteSrc.setEvtBatchSize(1);
+        igniteSrc.setEvtBufTimeout(1);
+        igniteSrc.setRuntimeContext(createRuntimeContext());
+
+        IgniteBiPredicate locLsnr = igniteSrc.getLocLsnr();
+
+        when(igniteEvts.remoteListen(locLsnr, taskRemoteFilter, EventType.EVT_CACHE_OBJECT_PUT ))
+            .thenReturn(UUID.randomUUID());
+
+        when(igniteCluster.forCacheNodes(TEST_CACHE)).thenReturn(clsGrp);
+    }
+
+    /**  */
+    @After
+    public void tearDownTest() {
+        igniteSrc.cancel();
+    }
+
+    /** Creates streaming runtime context */
+    private RuntimeContext createRuntimeContext() {
+        StreamingRuntimeContext runtimeCtx = mock(StreamingRuntimeContext.class);
+
+        when(runtimeCtx.isCheckpointingEnabled()).thenReturn(true);
+
+        return runtimeCtx;
+    }
+
+    /**
+     * Tests Ignite source run operation.
+     *
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testIgniteSourceRun() throws Exception {
+        IgniteInternalFuture f = GridTestUtils.runAsync(new Runnable() {
+            @Override public void run() {
+                try {
+                    igniteSrc.start(null, EventType.EVT_CACHE_OBJECT_PUT);
+
+                    igniteSrc.run(ctx);
+                }
+                catch (Throwable e) {
+                    igniteSrc.cancel();
+
+                   throw new AssertionError("Unexpected failure.", e);
+                }
+            }
+        });
+
+        long endTime = System.currentTimeMillis() + 2000;
+
+        GridTestUtils.waitForCondition(new GridAbsPredicate() {
+            @Override public boolean apply() {
+                return f.isDone() || System.currentTimeMillis() > endTime;
+            }
+        }, 3000);
+
+        igniteSrc.cancel();
+
+        f.get(3000);
+    }
+}
diff --git a/modules/flink-ext/src/test/java/org/apache/ignite/source/flink/FlinkIgniteSourceSelfTestSuite.java b/modules/flink-ext/src/test/java/org/apache/ignite/source/flink/FlinkIgniteSourceSelfTestSuite.java
new file mode 100644
index 0000000..7070402
--- /dev/null
+++ b/modules/flink-ext/src/test/java/org/apache/ignite/source/flink/FlinkIgniteSourceSelfTestSuite.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.source.flink;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * Apache Flink source tests.
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({FlinkIgniteSourceSelfTest.class})
+public class FlinkIgniteSourceSelfTestSuite {
+}
+
diff --git a/parent/pom.xml b/parent/pom.xml
new file mode 100644
index 0000000..fde57a5
--- /dev/null
+++ b/parent/pom.xml
@@ -0,0 +1,1336 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+    POM file.
+-->
+<project
+        xmlns="http://maven.apache.org/POM/4.0.0"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache</groupId>
+        <artifactId>apache</artifactId>
+        <version>16</version>
+    </parent>
+
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+
+        <ignite.edition>apache-ignite</ignite.edition>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.build.timestamp.format>MMMM d yyyy</maven.build.timestamp.format>
+        <doxygen.exec>doxygen</doxygen.exec>
+        <docfx.exec>docfx</docfx.exec>
+        <git.exec>git</git.exec>
+        <javadoc.opts>-Xdoclint:none</javadoc.opts>
+        <update.notifier.enabled.by.default>true</update.notifier.enabled.by.default>
+
+        <!-- Dependency versions -->
+        <activemq.version>5.12.0</activemq.version>
+        <aopalliance.bundle.version>1.0_6</aopalliance.bundle.version>
+        <asm.version>4.2</asm.version>
+        <aspectj.bundle.version>1.8.13_1</aspectj.bundle.version>
+        <aspectj.version>1.8.13</aspectj.version>
+        <aws.sdk.bundle.version>1.10.12_1</aws.sdk.bundle.version>
+        <aws.sdk.version>1.11.75</aws.sdk.version>
+        <camel.version>2.22.0</camel.version>
+        <aws.encryption.sdk.version>1.3.2</aws.encryption.sdk.version>
+        <commons.beanutils.bundle.version>1.9.2_1</commons.beanutils.bundle.version>
+        <commons.beanutils.version>1.9.3</commons.beanutils.version>
+        <commons.codec.version>1.11</commons.codec.version>
+        <commons.collections.version>3.2.2</commons.collections.version>
+        <commons.lang.version>2.6</commons.lang.version>
+        <commons.io.version>2.6</commons.io.version>
+        <cron4j.version>2.2.5</cron4j.version>
+        <curator.version>4.2.0</curator.version>
+        <easymock.version>3.4</easymock.version>
+        <ezmorph.bundle.version>1.0.6_1</ezmorph.bundle.version>
+        <ezmorph.version>1.0.6</ezmorph.version>
+        <flume.ng.version>1.7.0</flume.ng.version>
+        <guava.retrying.version>2.0.0</guava.retrying.version>
+        <guava.version>25.1-jre</guava.version>
+        <guava14.version>14.0.1</guava14.version>
+        <guava16.version>16.0.1</guava16.version>
+        <h2.version>1.4.197</h2.version>
+        <hadoop.version>2.9.1</hadoop.version>
+        <hamcrest.version>1.2</hamcrest.version>
+        <httpclient.version>4.5.1</httpclient.version>
+        <httpcore.version>4.4.3</httpcore.version>
+        <jackson.version>2.9.6</jackson.version>
+        <jackson1.version>1.9.13</jackson1.version>
+        <jaxb.api.version>2.1</jaxb.api.version>
+        <jaxb.impl.version>2.1.14</jaxb.impl.version>
+        <javassist.version>3.20.0-GA</javassist.version>
+        <javax.cache.bundle.version>1.0.0_1</javax.cache.bundle.version>
+        <javax.cache.tck.version>1.0.1</javax.cache.tck.version>
+        <javax.cache.version>1.0.0</javax.cache.version>
+        <jboss.rmi.version>1.0.6.Final</jboss.rmi.version>
+        <jetbrains.annotations.version>16.0.3</jetbrains.annotations.version>
+        <jetty.version>9.4.11.v20180605</jetty.version>
+        <jmh.version>1.13</jmh.version>
+        <jms.spec.version>1.1.1</jms.spec.version>
+        <jna.version>4.5.2</jna.version>
+        <jnr.posix.version>3.0.50</jnr.posix.version>
+        <jotm.version>2.2.3</jotm.version>
+        <jsch.bundle.version>0.1.54_1</jsch.bundle.version>
+        <jsch.version>0.1.54</jsch.version>
+        <jsonlib.bundle.version>2.4_1</jsonlib.bundle.version>
+        <jsonlib.version>2.4</jsonlib.version>
+        <jtidy.version>r938</jtidy.version>
+        <kafka.version>2.0.1</kafka.version>
+        <karaf.version>4.0.2</karaf.version>
+        <log4j.version>2.11.0</log4j.version>
+        <lucene.bundle.version>7.4.0_1</lucene.bundle.version>
+        <lucene.version>7.4.0</lucene.version>
+        <lz4.version>1.5.0</lz4.version>
+        <maven.bundle.plugin.version>3.5.0</maven.bundle.plugin.version>
+        <maven.checkstyle.plugin.version>3.0.0</maven.checkstyle.plugin.version>
+        <checkstyle.puppycrawl.version>8.19</checkstyle.puppycrawl.version>
+        <mockito.version>1.10.19</mockito.version>
+        <mysql.connector.version>8.0.13</mysql.connector.version>
+        <netlibjava.version>1.1.2</netlibjava.version>
+        <oro.bundle.version>2.0.8_6</oro.bundle.version>
+        <osgi.core.version>5.0.0</osgi.core.version>
+        <osgi.enterprise.version>5.0.0</osgi.enterprise.version>
+        <paho.version>1.0.2</paho.version>
+        <postgres.connector.version>42.2.5.jre7</postgres.connector.version>
+        <rocketmq.version>4.4.0</rocketmq.version>
+        <scala210.jline.version>2.10.7</scala210.jline.version>
+        <scala210.library.version>2.10.7</scala210.library.version>
+        <scala.library.version>2.11.12</scala.library.version>
+        <scala.test.version>2.2.6</scala.test.version>
+        <slf4j.version>1.7.7</slf4j.version>
+        <slf4j16.version>1.6.4</slf4j16.version>
+        <snappy.version>1.1.7.2</snappy.version>
+        <spark.hadoop.version>2.6.5</spark.hadoop.version>
+        <spark.version>2.3.0</spark.version>
+        <spring.data.version>1.13.14.RELEASE</spring.data.version> <!-- don't forget to update spring version -->
+        <spring.version>4.3.18.RELEASE</spring.version><!-- don't forget to update spring-data version -->
+        <spring.data-2.0.version>2.0.9.RELEASE</spring.data-2.0.version> <!-- don't forget to update spring-5.0 version -->
+        <spring-5.0.version>5.0.8.RELEASE</spring-5.0.version><!-- don't forget to update spring-data-2.0 version -->
+        <spring41.osgi.feature.version>4.1.7.RELEASE_1</spring41.osgi.feature.version>
+        <storm.version>1.1.1</storm.version>
+        <tomcat.version>9.0.10</tomcat.version>
+        <twitter.hbc.version>2.2.0</twitter.hbc.version>
+        <yammer.metrics.annotation.version>2.2.0</yammer.metrics.annotation.version>
+        <yammer.metrics.core.version>2.2.0</yammer.metrics.core.version>
+        <yardstick.version>0.8.3</yardstick.version>
+        <zkclient.version>0.5</zkclient.version>
+        <zookeeper.version>3.5.5</zookeeper.version>
+        <zstd.version>1.3.7-2</zstd.version>
+        <opencensus.version>0.22.0</opencensus.version>
+
+
+        <!-- Maven plugins versions -->
+        <maven.javadoc.plugin.version>2.10.4</maven.javadoc.plugin.version>
+
+        <!-- OSGI Manifest generation default property values -->
+        <osgi.import.package>*</osgi.import.package>
+        <osgi.export.package>{local-packages}</osgi.export.package>
+        <osgi.embed.transitive>false</osgi.embed.transitive>
+        <osgi.fail.ok>false</osgi.fail.ok>
+
+    </properties>
+
+    <groupId>org.apache.ignite</groupId>
+    <artifactId>ignite-parent</artifactId>
+    <version>1</version>
+    <packaging>pom</packaging>
+
+    <url>http://ignite.apache.org</url>
+
+    <description>Java-based middleware for in-memory processing of big data in a distributed environment.</description>
+
+    <licenses>
+        <license>
+            <name>The Apache Software License, Version 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+        </license>
+    </licenses>
+
+    <mailingLists>
+        <mailingList>
+            <name>Ignite Dev List</name>
+            <subscribe>dev-subscribe@ignite.apache.org</subscribe>
+            <unsubscribe>dev-unsubscribe@ignite.apache.org</unsubscribe>
+            <post>dev@ignite.apache.org</post>
+            <archive>http://mail-archives.apache.org/mod_mbox/ignite-dev</archive>
+        </mailingList>
+    </mailingLists>
+
+    <issueManagement>
+        <system>jira</system>
+        <url>http://issues.apache.org/jira/browse/IGNITE</url>
+    </issueManagement>
+
+    <developers>
+        <developer>
+            <id>dsetrakyan</id>
+            <name>Dmitriy Setrakyan</name>
+            <email>dsetrakyan at apache dot org</email>
+        </developer>
+        <developer>
+            <id>agoncharuk</id>
+            <name>Alexey Goncharuk</name>
+            <email>agoncharuk at apache dot org</email>
+        </developer>
+        <developer>
+            <id>vkulichenko</id>
+            <name>Valentin Kulichenko</name>
+            <email>vkulichenko at apache dot org</email>
+        </developer>
+        <developer>
+            <id>svladykin</id>
+            <name>Sergi Vladykin</name>
+            <email>sergi dot vladykin at gmail dot com</email>
+        </developer>
+        <developer>
+            <id>yzhdanov</id>
+            <name>Yakov Zhdanov</name>
+            <email>yzhdanov at apache dot org</email>
+        </developer>
+        <developer>
+            <id>sboikov</id>
+            <name>Semyon Boikov</name>
+            <email>sboikov at gridgain dot com</email>
+        </developer>
+        <developer>
+            <id>vozerov</id>
+            <name>Vladimir Ozerov</name>
+            <email>vozerov at gridgain dot com</email>
+        </developer>
+        <developer>
+            <id>samaitra</id>
+            <name>Saikat Maitra</name>
+            <email>saikat dot maitra at gmail dot com</email>
+        </developer>
+
+    </developers>
+
+    <repositories>
+        <repository>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+                <updatePolicy>always</updatePolicy>
+                <checksumPolicy>ignore</checksumPolicy>
+            </snapshots>
+            <id>h2database.com</id>
+            <name>Snapshot repository on h2database.com</name>
+            <url>https://h2database.com/m2-repo</url>
+            <layout>default</layout>
+        </repository>
+    </repositories>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>log4j</groupId>
+                <artifactId>log4j</artifactId>
+                <version>1.2.17</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>com.sun.jdmk</groupId>
+                        <artifactId>jmxtools</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>com.sun.jmx</groupId>
+                        <artifactId>jmxri</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.11</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.javassist</groupId>
+            <artifactId>javassist</artifactId>
+            <version>${javassist.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>net.alchim31.maven</groupId>
+                    <artifactId>scala-maven-plugin</artifactId>
+                    <version>3.3.2</version>
+                    <configuration>
+                        <jvmArgs>
+                            <jvmArg>-Xms512m</jvmArg>
+                            <jvmArg>-Xmx1024m</jvmArg>
+                        </jvmArgs>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <id>scala-compile-first</id>
+                            <phase>process-resources</phase>
+                            <goals>
+                                <goal>add-source</goal>
+                                <goal>compile</goal>
+                            </goals>
+                        </execution>
+                        <execution>
+                            <id>scala-test-compile</id>
+                            <phase>process-test-resources</phase>
+                            <goals>
+                                <goal>testCompile</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <configuration>
+                        <useDefaultManifestFile>true</useDefaultManifestFile>
+                    </configuration>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-javadoc-plugin</artifactId>
+                    <version>${maven.javadoc.plugin.version}</version>
+                    <configuration>
+                        <taglets>
+                            <taglet>
+                                <tagletClass>org.apache.ignite.tools.javadoc.IgniteLinkTaglet</tagletClass>
+                                <tagletArtifact>
+                                    <groupId>org.apache.ignite</groupId>
+                                    <artifactId>ignite-tools</artifactId>
+                                    <version>${project.version}</version>
+                                </tagletArtifact>
+                            </taglet>
+                        </taglets>
+                        <doctitle>Ignite ${project.version}</doctitle>
+                        <windowtitle>Ignite ${project.version}</windowtitle>
+                        <breakiterator>true</breakiterator>
+                        <verbose>true</verbose>
+                        <show>protected</show>
+                        <use>true</use>
+                        <author>false</author>
+                        <version>false</version>
+                        <additionalparam>${javadoc.opts}</additionalparam>
+                        <links>
+                            <link>https://hadoop.apache.org/docs/current/api/</link>
+                        </links>
+                        <groups>
+                            <group>
+                                <title>Common Grid APIs</title>
+                                <packages>
+                                    org.apache.ignite:org.apache.ignite.cluster:org.apache.ignite.lifecycle:org.apache.ignite.configuration:org.apache.ignite.spi:org.apache.ignite.lang:org.apache.ignite.resources:org.apache.ignite.thread:org.apache.ignite.scheduler
+                                </packages>
+                            </group>
+                            <group>
+                                <title>Messaging APIs</title>
+                                <packages>org.apache.ignite.messaging</packages>
+                            </group>
+                            <group>
+                                <title>Event Notification APIs</title>
+                                <packages>org.apache.ignite.events</packages>
+                            </group>
+                            <group>
+                                <title>Compute Grid APIs</title>
+                                <packages>org.apache.ignite.compute*</packages>
+                            </group>
+                            <group>
+                                <title>Data Grid APIs</title>
+                                <packages>
+                                    org.apache.ignite.cache*:org.apache.ignite.transactions:org.apache.ignite.datastructures:org.apache.ignite.dataload
+                                </packages>
+                            </group>
+                            <group>
+                                <title>Service Grid APIs</title>
+                                <packages>org.apache.ignite.services</packages>
+                            </group>
+                            <group>
+                                <title>Ignite Thin Client APIs</title>
+                                <packages>org.apache.ignite.client</packages>
+                            </group>
+                            <group>
+                                <title>File System APIs</title>
+                                <packages>org.apache.ignite.igfs*</packages>
+                            </group>
+                            <group>
+                                <title>Hadoop Accelerator APIs</title>
+                                <packages>org.apache.ignite.hadoop*</packages>
+                            </group>
+                            <group>
+                                <title>Streaming APIs</title>
+                                <packages>org.apache.ignite.streamer*::org.apache.ignite.stream*</packages>
+                            </group>
+                            <group>
+                                <title>Security APIs</title>
+                                <packages>org.apache.ignite.plugin.security:org.apache.ignite.ssl</packages>
+                            </group>
+                            <group>
+                                <title>MXBeans classes</title>
+                                <packages>org.apache.ignite.mbean:org.apache.ignite.mxbean</packages>
+                            </group>
+                            <group>
+                                <title>SPI: CheckPoint</title>
+                                <packages>org.apache.ignite.spi.checkpoint*</packages>
+                            </group>
+                            <group>
+                                <title>SPI: Collision</title>
+                                <packages>org.apache.ignite.spi.collision*</packages>
+                            </group>
+                            <group>
+                                <title>SPI: Indexing</title>
+                                <packages>org.apache.ignite.spi.indexing*</packages>
+                            </group>
+                            <group>
+                                <title>SPI: Load Balancing</title>
+                                <packages>org.apache.ignite.spi.loadbalancing*</packages>
+                            </group>
+                            <group>
+                                <title>SPI: Communication</title>
+                                <packages>org.apache.ignite.spi.communication*</packages>
+                            </group>
+                            <group>
+                                <title>SPI: Deployment</title>
+                                <packages>org.apache.ignite.spi.deployment*</packages>
+                            </group>
+                            <group>
+                                <title>SPI: Swap Space</title>
+                                <packages>org.apache.ignite.spi.swapspace*</packages>
+                            </group>
+                            <group>
+                                <title>SPI: Discovery</title>
+                                <packages>org.apache.ignite.spi.discovery*</packages>
+                            </group>
+                            <group>
+                                <title>SPI: Failover</title>
+                                <packages>org.apache.ignite.spi.failover*</packages>
+                            </group>
+                            <group>
+                                <title>SPI: Event Storage</title>
+                                <packages>org.apache.ignite.spi.eventstorage*</packages>
+                            </group>
+                            <group>
+                                <title>Communication Failure Detection</title>
+                                <packages>org.apache.ignite.failure</packages>
+                            </group>
+                            <group>
+                                <title>Segmentation Detection</title>
+                                <packages>org.apache.ignite.plugin.segmentation</packages>
+                            </group>
+                            <group>
+                                <title>Ignite plugin API</title>
+                                <packages>org.apache.ignite.plugin*</packages>
+                            </group>
+                            <group>
+                                <title>Logging</title>
+                                <packages>org.apache.ignite.logger*</packages>
+                            </group>
+                            <group>
+                                <title>Loaders</title>
+                                <packages>org.apache.ignite.startup*</packages>
+                            </group>
+                            <group>
+                                <title>Marshallers</title>
+                                <packages>org.apache.ignite.marshaller*</packages>
+                            </group>
+                            <group>
+                                <title>Ignite Binary Objects API</title>
+                                <packages>org.apache.ignite.binary*</packages>
+                            </group>
+                            <group>
+                                <title>Visor Plugins</title>
+                                <packages>org.apache.ignite.visor.plugin</packages>
+                            </group>
+                            <group>
+                                <title>Spring Integration</title>
+                                <packages>org.apache.ignite.cache.spring:org.apache.ignite.transactions.spring</packages>
+                            </group>
+                            <group>
+                                <title>Mesos Framework</title>
+                                <packages>org.apache.ignite.mesos*</packages>
+                            </group>
+                            <group>
+                                <title>Yarn Integration</title>
+                                <packages>org.apache.ignite.yarn*</packages>
+                            </group>
+                            <group>
+                                <title>Platforms</title>
+                                <packages>org.apache.ignite.platform*</packages>
+                            </group>
+                            <group>
+                                <title>Spark Integration</title>
+                                <packages>org.apache.ignite.spark.examples.java</packages>
+                            </group>
+                            <group>
+                                <title>OSGi integration</title>
+                                <packages>org.apache.ignite.osgi*</packages>
+                            </group>
+                            <group>
+                                <title>Flink Sink Integration</title>
+                                <packages>org.apache.ignite.sink.flink*</packages>
+                            </group>
+                            <group>
+                                <title>Flink Source Integration</title>
+                                <packages>org.apache.ignite.source.flink*</packages>
+                            </group>
+                            <group>
+                                <title>SpringData integration</title>
+                                <packages>org.apache.ignite.springdata.repository*</packages>
+                            </group>
+                            <group>
+                                <title>SpringData 2.0 integration</title>
+                                <packages>org.apache.ignite.springdata20.repository*</packages>
+                            </group>
+                            <group>
+                            <title>RocketMQ integration</title>
+                                <packages>org.apache.ignite.stream.rocketmq*</packages>
+                            </group>
+                            <group>
+                                <title>Storm integration</title>
+                                <packages>org.apache.ignite.stream.storm*</packages>
+                            </group>
+                            <group>
+                                <title>Ignite Development Utils</title>
+                                <packages>org.apache.ignite.development.utils*</packages>
+                            </group>
+                            <group>
+                                <title>Ignite ML</title>
+                                <packages>org.apache.ignite.ml*</packages>
+                            </group>
+                            <group>
+                                <title>Ignite TensorFlow</title>
+                                <packages>org.apache.ignite.tensorflow*</packages>
+                            </group>
+                            <group>
+                                <title>Encryption SPI</title>
+                                <packages>org.apache.ignite.spi.encryption*</packages>
+                            </group>
+                            <group>
+                                <title>Ignite Web Console</title>
+                                <packages>org.apache.ignite.console*</packages>
+                            </group>
+                            <group>
+                                <title>Metric SPI</title>
+                                <packages>org.apache.ignite.spi.metric*</packages>
+                            </group>
+                            <group>
+                                <title>System view SPI</title>
+                                <packages>org.apache.ignite.spi.systemview*</packages>
+                            </group>
+                        </groups>
+                        <bottom>
+                            <![CDATA[
+                                    <table width="100%" border="0" cellspacing=0 cellpadding=0 style="padding: 5px">
+                                    <tr>
+                                        <td>
+                                            <table style="padding-left: 0; margin: 0">
+                                                <tbody style="padding: 0; margin: 0">
+                                                    <tr style="padding: 0; margin: 0">
+                                                        <td>
+                                                            <a target=_blank href="https://ignite.apache.org"><nobr>${current.year} Copyright &#169; Apache Software Foundation</nobr></a>
+                                                        </td>
+                                                    </tr>
+                                                </tbody>
+                                            </table>
+                                        </td>
+                                        <td width="100%" align="right" valign="center">
+                                            <a href="https://twitter.com/ApacheIgnite" class="twitter-follow-button" data-show-count="false" data-size="large">Follow @ApacheIgnite</a>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <td colspan="2" valign="top" align="left">
+                                            <table style="padding-left: 0; margin: 0">
+                                                <tbody style="padding: 0; margin: 0">
+                                                    <tr style="padding: 0; margin: 0">
+                                                        <td>
+                                                            <b>Ignite Database and Caching Platform</b>
+                                                        </td>
+                                                        <td>:&nbsp;&nbsp;
+                                                            ver. <strong>${project.version}</strong>
+                                                        </td>
+                                                    </tr>
+                                                    <tr style="padding: 0; margin: 0">
+                                                        <td>
+                                                            <b>Release Date</b>
+                                                        </td>
+                                                        <td>:&nbsp;&nbsp;
+                                                            ${maven.build.timestamp}
+                                                        </td>
+                                                    </tr>
+                                                </tbody>
+                                            </table>
+                                        </td>
+                                    </tr>
+                                    </table>
+                                ]]>
+                        </bottom>
+                    </configuration>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.felix</groupId>
+                    <artifactId>maven-bundle-plugin</artifactId>
+                    <version>${maven.bundle.plugin.version}</version>
+                    <extensions>true</extensions>
+                    <configuration>
+                        <archive>
+                            <addMavenDescriptor>true</addMavenDescriptor>
+                        </archive>
+                        <supportedProjectTypes>
+                            <supportedProjectType>jar</supportedProjectType>
+                            <supportedProjectType>war</supportedProjectType>
+                        </supportedProjectTypes>
+                        <instructions>
+                            <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
+                            <Bundle-Version>${project.version}</Bundle-Version>
+                            <Bundle-Vendor>${project.organization.name}</Bundle-Vendor>
+                            <Bundle-Description>${project.description}</Bundle-Description>
+                            <Bundle-DocURL>${project.url}</Bundle-DocURL>
+                            <Import-Package>
+                                ${osgi.import.package}
+                            </Import-Package>
+                            <Export-Package>
+                                ${osgi.export.package}
+                            </Export-Package>
+                            <Private-Package>
+                                ${osgi.private.package}
+                            </Private-Package>
+                            <Embed-Dependency>${osgi.embed.dependency}</Embed-Dependency>
+                            <Embed-Directory>lib</Embed-Directory>
+                            <Embed-Transitive>${osgi.embed.transitive}</Embed-Transitive>
+                            <_failok>${osgi.fail.ok}</_failok>
+                            <_invalidfilenames/>
+                        </instructions>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <id>bundle-manifest</id>
+                            <phase>process-classes</phase>
+                            <goals>
+                                <goal>manifest</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M3</version>
+                <configuration>
+                    <forkCount>0</forkCount>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>2.2.1</version>
+                <executions>
+                    <execution>
+                        <id>source</id>
+                        <goals>
+                            <goal>jar-no-fork</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                            <excludeResources>true</excludeResources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>flatten-maven-plugin</artifactId>
+                <version>1.0.1</version>
+
+                <configuration>
+                    <flattenMode>minimum</flattenMode>
+                    <flattenedPomFilename>pom-installed.xml</flattenedPomFilename>
+                </configuration>
+
+                <executions>
+                    <!-- enable flattening -->
+                    <execution>
+                        <id>flatten</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>flatten</goal>
+                        </goals>
+                    </execution>
+
+                    <!-- ensure proper cleanup before start -->
+                    <execution>
+                        <id>flatten.clean.before</id>
+                        <phase>clean</phase>
+                        <goals>
+                            <goal>clean</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!-- ensure proper cleanup after install -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-clean-plugin</artifactId>
+                <inherited>false</inherited>
+                <executions>
+                    <execution>
+                        <id>flatten.clean.after</id>
+                        <phase>install</phase>
+                        <goals>
+                            <goal>clean</goal>
+                        </goals>
+                        <configuration>
+                            <excludeDefaultDirectories>true</excludeDefaultDirectories>
+                            <filesets>
+                                <fileset>
+                                    <directory>${project.basedir}</directory>
+                                    <includes>
+                                        <include>**/pom-installed.xml</include>
+                                    </includes>
+                                </fileset>
+                            </filesets>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-install-plugin</artifactId>
+                <version>2.5.2</version>
+                <inherited>false</inherited>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>2.8.2</version>
+                <inherited>false</inherited>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-enforcer-plugin</artifactId>
+                <version>3.0.0-M2</version>
+                <configuration>
+                    <rules>
+                        <requireJavaVersion>
+                            <!--Detected JDK Version: 1.8.0 is not in the allowed range [1.7,1.8),[1.8.0-40,).-->
+                            <message>
+[INFO] ------------------------------------------------------------------------
+[ERROR] You are trying to compile Apache Ignite with inappropriate JDK version!
+[ERROR] Detected JDK Version: ${java.runtime.version}
+[ERROR] JDK version should be 1.7.0-* or >= 1.8.0-u40.
+                            </message>
+                            <version>[1.7,1.8),[1.8.0-40,)</version>
+                        </requireJavaVersion>
+                    </rules>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>enforce</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-libs</id>
+                        <phase>test-compile</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <excludeGroupIds>org.apache.ignite</excludeGroupIds>
+                            <outputDirectory>target/libs</outputDirectory>
+                            <includeScope>runtime</includeScope>
+                            <excludeTransitive>true</excludeTransitive>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>module-javadoc</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                        <phase>package</phase>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>checkstyle</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-checkstyle-plugin</artifactId>
+                        <version>${maven.checkstyle.plugin.version}</version>
+                        <executions>
+                            <execution>
+                                <id>style</id>
+                                <goals>
+                                    <goal>check</goal>
+                                </goals>
+                                <phase>validate</phase>
+                                <configuration>
+                                    <consoleOutput>true</consoleOutput>
+                                    <logViolationsToConsole>true</logViolationsToConsole>
+                                    <failsOnError>true</failsOnError>
+                                    <failOnViolation>true</failOnViolation>
+                                    <outputFile>${project.build.directory}/checkstyle-result.xml</outputFile>
+                                    <configLocation>../checkstyle/checkstyle.xml</configLocation>
+                                    <suppressionsLocation>../checkstyle/checkstyle-suppressions.xml</suppressionsLocation>
+                                    <includeTestSourceDirectory>true</includeTestSourceDirectory>
+                                </configuration>
+                            </execution>
+                        </executions>
+                        <dependencies>
+                            <dependency>
+                                <groupId>com.puppycrawl.tools</groupId>
+                                <artifactId>checkstyle</artifactId>
+                                <version>${checkstyle.puppycrawl.version}</version>
+                            </dependency>
+                        </dependencies>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>check-licenses</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.rat</groupId>
+                        <artifactId>apache-rat-plugin</artifactId>
+                        <version>0.12</version>
+                        <configuration>
+                            <addDefaultLicenseMatchers>false</addDefaultLicenseMatchers>
+                            <licenses>
+                                <license implementation="org.apache.rat.analysis.license.FullTextMatchingLicense">
+                                    <licenseFamilyCategory>IAL20</licenseFamilyCategory>
+                                    <licenseFamilyName>Ignite Apache License 2.0</licenseFamilyName>
+                                    <fullText>
+                                        Licensed to the Apache Software Foundation (ASF) under one or more
+                                        contributor license agreements.  See the NOTICE file distributed with
+                                        this work for additional information regarding copyright ownership.
+                                        The ASF licenses this file to You under the Apache License, Version 2.0
+                                        (the "License"); you may not use this file except in compliance with
+                                        the License.  You may obtain a copy of the License at
+
+                                        http://www.apache.org/licenses/LICENSE-2.0
+
+                                        Unless required by applicable law or agreed to in writing, software
+                                        distributed under the License is distributed on an "AS IS" BASIS,
+                                        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+                                        See the License for the specific language governing permissions and
+                                        limitations under the License.
+                                    </fullText>
+                                </license>
+                            </licenses>
+                            <licenseFamilies>
+                                <licenseFamily implementation="org.apache.rat.license.SimpleLicenseFamily">
+                                    <familyName>Ignite Apache License 2.0</familyName>
+                                </licenseFamily>
+                            </licenseFamilies>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <phase>validate</phase>
+                                <goals>
+                                    <goal>check</goal>
+                                </goals>
+                                <configuration>
+                                    <excludes>
+                                        <exclude>work/**</exclude>
+                                        <exclude>**/target/**</exclude>
+                                        <exclude>**/*.log</exclude>
+                                        <exclude>**/*.m4</exclude><!--Free Software Foundation notice-->
+                                        <exclude>**/*.dylib</exclude><!--bin-files-->
+                                        <exclude>**/*.gar</exclude><!--bin-files-->
+                                        <exclude>**/licenses/*.txt</exclude><!--files of licenses-->
+                                        <exclude>**/*readme*.txt</exclude><!--readme files-->
+                                        <exclude>**/*.sql</exclude><!--sql files-->
+                                        <exclude>**/*README*.txt</exclude><!--readme files-->
+                                        <exclude>**/*README*.md</exclude><!--readme files-->
+                                        <exclude>**/*CONTRIBUTING*.md</exclude><!--readme files-->
+                                        <exclude>**/*index*.md</exclude><!--readme files-->
+                                        <exclude>**/*.timestamp</exclude><!--tmp-files-->
+                                        <exclude>**/*.iml</exclude><!--IDEA files-->
+                                        <exclude>**/*.csv</exclude><!--CSV files-->
+                                        <exclude>**/*.jks</exclude><!--bin-files-->
+                                        <exclude>**/pom-installed.xml</exclude><!--tmp-files-->
+                                        <exclude>**/keystore</exclude><!--bin-files-->
+                                        <exclude>**/keystore/*.jks</exclude><!--bin-files-->
+                                        <exclude>**/keystore/*.pem</exclude><!--auto generated files-->
+                                        <exclude>**/keystore/*.pfx</exclude><!--bin-files-->
+                                        <exclude>**/keystore/ca/*.jks</exclude><!--bin-files-->
+                                        <exclude>**/keystore/ca/*.key</exclude><!--bin-files-->
+                                        <exclude>**/keystore/ca/*.txt</exclude><!--auto generated files-->
+                                        <exclude>**/keystore/ca/*.txt.attr</exclude><!--auto generated files-->
+                                        <exclude>**/keystore/ca/*serial</exclude><!--auto generated files-->
+                                        <exclude>**/META-INF/services/**</exclude> <!-- Interface mappings: cannot be changed -->
+                                        <!--special excludes-->
+                                        <exclude>idea/ignite_codeStyle.xml</exclude>
+                                        <exclude>**/DEVNOTES*.txt</exclude>
+                                        <exclude>**/NOTICE*</exclude>
+                                        <exclude>**/LICENSE*</exclude>
+                                        <exclude>**/MIGRATION_GUIDE*</exclude>
+                                        <exclude>src/main/java/org/apache/ignite/internal/util/offheap/unsafe/GridOffHeapSnapTreeMap.java</exclude><!--BSD license-->
+                                        <exclude>src/main/java/org/apache/ignite/internal/util/nio/SelectedSelectionKeySet.java</exclude><!-- Apache 2.0 license -->
+                                        <exclude>src/main/java/org/apache/ignite/internal/util/snaptree/*.java</exclude><!--BSD license-->
+                                        <exclude>src/main/java/org/jsr166/*.java</exclude>
+                                        <exclude>src/main/java/org/mindrot/*.java</exclude>
+                                        <exclude>src/test/java/org/apache/ignite/p2p/p2p.properties</exclude><!--test depends on file content-->
+                                        <exclude>src/test/resources/org.apache.ignite.util/control.sh_cache_help.output</exclude><!--test depends on file content-->
+                                        <exclude>src/test/resources/org.apache.ignite.util/control.sh_help.output</exclude><!--test depends on file content-->
+                                        <exclude>src/test/resources/log/ignite.log.tst</exclude><!--test resource-->
+                                        <exclude>src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.incorrefs</exclude><!--test resource-->
+                                        <exclude>src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.empty</exclude><!--should be empty-->
+                                        <exclude>src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.brokenxml</exclude><!--test resource-->
+                                        <exclude>**/books/*.txt</exclude><!--books examples-->
+                                        <exclude>src/main/java/org/apache/ignite/examples/streaming/wordcount/*.txt</exclude><!--books examples-->
+                                        <exclude>examples/src/main/java/org/apache/ignite/examples/streaming/wordcount/*.txt</exclude><!--books examples-->
+                                        <exclude>**/resources/datasets/**/*</exclude><!--Datasets in ml module-->
+                                        <exclude>**/resources/models/**/*</exclude><!--Pre-trained ml models-->
+                                        <exclude>src/main/java/org/jetbrains/annotations/*.java</exclude><!--copyright-->
+                                        <exclude>dev-tools/IGNITE-*.patch</exclude>
+                                        <exclude>dev-tools/.gradle/**/*</exclude>
+                                        <exclude>dev-tools/gradle/wrapper/**/*</exclude>
+                                        <exclude>dev-tools/gradlew</exclude>
+                                        <exclude>src/test/binaries/repo/org/apache/ignite/binary/test2/1.1/test2-1.1.pom</exclude>
+                                        <exclude>src/test/binaries/repo/org/apache/ignite/binary/test2/maven-metadata-local.xml</exclude>
+                                        <exclude>src/test/binaries/repo/org/apache/ignite/binary/test1/1.1/test1-1.1.pom</exclude>
+                                        <exclude>src/test/binaries/repo/org/apache/ignite/binary/test1/maven-metadata-local.xml</exclude>
+                                        <exclude>src/test/resources/org/apache/ignite/internal/managers/discovery/Wrapper.ser</exclude>
+                                        <!--shmem-->
+                                        <exclude>ipc/shmem/**/Makefile.in</exclude><!--auto generated files-->
+                                        <exclude>ipc/shmem/**/Makefile</exclude><!--auto generated files-->
+                                        <exclude>ipc/shmem/compile</exclude><!--generated by Autoconf and licensed under AL-->
+                                        <exclude>ipc/shmem/config.guess</exclude><!--generated by Autoconf and licensed under AL-->
+                                        <exclude>ipc/shmem/config.sub</exclude><!--generated by Autoconf and licensed under AL-->
+                                        <exclude>ipc/shmem/configure</exclude><!--free software-->
+                                        <exclude>ipc/shmem/config.h.in</exclude><!--auto generated-->
+                                        <exclude>ipc/shmem/configure.ac</exclude><!--cannot be changed-->
+                                        <exclude>ipc/shmem/ltmain.sh</exclude><!--generated by Autoconf and licensed under AL-->
+                                        <exclude>ipc/shmem/install-sh</exclude><!--free license-->
+                                        <exclude>ipc/shmem/depcomp</exclude><!--generated by Autoconf and licensed under AL-->
+                                        <exclude>ipc/shmem/config.status</exclude><!--auto generated-->
+                                        <exclude>ipc/shmem/libtool</exclude><!--auto generated-->
+                                        <exclude>ipc/shmem/missing</exclude><!--generated by Autoconf and licensed under AL-->
+                                        <exclude>ipc/shmem/stamp-h1</exclude><!--tmp timestamp-->
+                                        <exclude>ipc/shmem/ltmain.sh</exclude><!--tmp (not under VCS)-->
+                                        <exclude>ipc/shmem/include/org_apache_ignite_internal_util_ipc_shmem_IpcSharedMemoryUtils.h</exclude><!--auto generated files-->
+                                        <exclude>ipc/shmem/igniteshmem/.libs/*</exclude><!--tmp files-->
+                                        <exclude>ipc/shmem/igniteshmem/.deps/*</exclude><!--tmp files-->
+                                        <exclude>ipc/shmem/igniteshmem/libigniteshmem.la</exclude><!--tmp (not under VCS)-->
+                                        <exclude>ipc/shmem/igniteshmem/libigniteshmem_la-org_apache_ignite_internal_util_ipc_shmem_IpcSharedMemoryUtils.lo</exclude><!--tmp (not under VCS)-->
+                                        <!--platforms-->
+                                        <exclude>src/test/binaries/repo/org/apache/ignite/binary/test1/1.1/test1-1.1.jar</exclude>
+                                        <exclude>src/test/binaries/repo/org/apache/ignite/binary/test2/1.1/test2-1.1.jar</exclude>
+                                        <exclude>**/Makefile.am</exclude>
+                                        <exclude>**/configure.ac</exclude>
+                                        <exclude>**/Makefile.amrel</exclude>
+                                        <exclude>**/configure.acrel</exclude>
+                                        <exclude>**/*.pc.in</exclude>
+                                        <exclude>**/*.sln</exclude>
+                                        <exclude>**/*.snk</exclude>
+                                        <exclude>**/*.slnrel</exclude>
+                                        <exclude>**/*.ini</exclude>
+                                        <exclude>**/*.DotSettings</exclude>
+                                        <exclude>**/*.FxCop</exclude>
+                                        <exclude>**/*.ruleset</exclude>
+                                        <exclude>**/*.csproj</exclude>
+                                        <exclude>**/*.ndproj</exclude>
+                                        <exclude>**/*.csprojrel</exclude>
+                                        <exclude>**/*.vcxproj</exclude>
+                                        <exclude>**/*.vcxprojrel</exclude>
+                                        <exclude>**/*.vcxproj.filters</exclude>
+                                        <exclude>**/mkbuild.cmd</exclude>
+                                        <exclude>**/module.def</exclude>
+                                        <exclude>**/*.fxcop</exclude>
+                                        <exclude>**/*.ruleset</exclude>
+                                        <exclude>**/*.metaproj</exclude>
+                                        <exclude>**/*.metaproj.tmp</exclude>
+                                        <exclude>**/*.nunit</exclude>
+                                        <exclude>**/teamcity_boost.cpp</exclude>
+                                        <exclude>**/teamcity_messages.h</exclude>
+                                        <exclude>**/teamcity_messages.cpp</exclude>
+                                        <exclude>**/project/vs/**</exclude>
+                                        <exclude>**/obj/x64/**</exclude>
+                                        <exclude>**/obj/x86/**</exclude>
+                                        <exclude>**/bin/x64/**</exclude>
+                                        <exclude>**/bin/x86/**</exclude>
+                                        <exclude>**/*.dxg</exclude>
+                                        <exclude>**/*.cmd</exclude>
+                                        <exclude>**/*.ps1</exclude>
+                                        <exclude>**/*.json</exclude>
+                                        <exclude>**/.dockerignore</exclude>
+                                        <exclude>modules/platforms/nodejs/examples/certs/client.crt</exclude>
+                                        <exclude>modules/platforms/nodejs/examples/certs/ca.crt</exclude>
+                                        <exclude>modules/platforms/nodejs/examples/certs/client.key</exclude>
+                                        <exclude>modules/platforms/nodejs/api_spec/**</exclude>
+                                        <exclude>modules/platforms/python/**/*.md</exclude><!--markdown can not be commented-->
+                                        <exclude>modules/platforms/python/docs/Makefile</exclude><!--sphinx files: BSD license-->
+                                        <exclude>modules/platforms/python/docs/conf.py</exclude><!--sphinx files: BSD license-->
+                                        <exclude>modules/platforms/python/docs/source/**/*.rst</exclude><!--sphinx-apidoc generated files-->
+                                        <exclude>modules/platforms/python/requirements/**/*.txt</exclude><!--plain text can not be commented-->
+                                        <!--web console-->
+                                        <exclude>**/web-console/**/.eslintrc</exclude>
+                                        <exclude>**/web-console/**/.babelrc</exclude>
+                                        <exclude>**/web-console/**/*.json</exclude>
+                                        <exclude>**/web-console/**/*.json.sample</exclude>
+                                        <exclude>**/web-console/backend/build/**</exclude>
+                                        <exclude>**/web-console/backend/node_modules/**</exclude>
+                                        <exclude>**/web-console/e2e/testcafe/node_modules/**</exclude>
+                                        <exclude>**/web-console/frontend/build/**</exclude>
+                                        <exclude>**/web-console/frontend/node_modules/**</exclude>
+                                        <exclude>**/web-console/frontend/**/*.png</exclude>
+                                        <exclude>**/web-console/frontend/**/*.svg</exclude>
+                                        <!--Packaging -->
+                                        <exclude>packaging/**</exclude>
+                                    </excludes>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>surefire-fork-count-1</id>
+            <activation>
+                <property>
+                    <!-- To activate this profile set the following property. -->
+                    <name>FORK_COUNT_SET_TO_1</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M3</version>
+                        <configuration>
+                            <forkCount>1</forkCount>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>java-9+</id>
+            <activation>
+                <jdk>[1.9,)</jdk>
+            </activation>
+            <properties>
+                <maven.compiler.source>1.8</maven.compiler.source>
+                <maven.compiler.target>11</maven.compiler.target>
+                <scala.library.version>2.12.6</scala.library.version>
+            </properties>
+            <dependencies/>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-compiler-plugin</artifactId>
+                        <version>3.7.0</version>
+                        <configuration>
+                            <compilerArgs>
+                                <arg>--add-exports</arg>
+                                <arg>java.base/jdk.internal.misc=ALL-UNNAMED</arg>
+                                <arg>--add-exports</arg>
+                                <arg>java.base/sun.nio.ch=ALL-UNNAMED</arg>
+                                <arg>--add-exports</arg>
+                                <arg>java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED</arg>
+                                <arg>--add-exports</arg>
+                                <arg>jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED</arg>
+                            </compilerArgs>
+                        </configuration>
+                    </plugin>
+
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <argLine>--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED --add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED --add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED --illegal-access=permit</argLine>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+
+            <dependencyManagement>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.hadoop</groupId>
+                        <artifactId>hadoop-common</artifactId>
+                        <exclusions>
+                            <exclusion>
+                                <!-- This dependency is not available with java 9.-->
+                                <groupId>jdk.tools</groupId>
+                                <artifactId>jdk.tools</artifactId>
+                            </exclusion>
+                        </exclusions>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.apache.hadoop</groupId>
+                        <artifactId>hadoop-common</artifactId>
+                        <type>test-jar</type>
+                        <exclusions>
+                            <exclusion>
+                                <!-- This dependency is not available with java 9.-->
+                                <groupId>jdk.tools</groupId>
+                                <artifactId>jdk.tools</artifactId>
+                            </exclusion>
+                        </exclusions>
+                    </dependency>
+                </dependencies>
+            </dependencyManagement>
+
+        </profile>
+
+        <profile>
+            <id>tools.jar-default</id>
+            <activation>
+                <file>
+                    <exists>${java.home}/../lib/tools.jar</exists>
+                </file>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>com.sun</groupId>
+                    <artifactId>tools</artifactId>
+                    <scope>system</scope>
+                    <version>${java.version}</version>
+                    <systemPath>${java.home}/../lib/tools.jar</systemPath>
+                </dependency>
+            </dependencies>
+        </profile>
+
+        <profile>
+            <id>tools.jar-mac</id>
+            <activation>
+                <file>
+                    <exists>${java.home}/../Classes/classes.jar</exists>
+                </file>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>com.sun</groupId>
+                    <artifactId>tools</artifactId>
+                    <scope>system</scope>
+                    <version>${java.version}</version>
+                    <systemPath>${java.home}/../Classes/classes.jar</systemPath>
+                </dependency>
+            </dependencies>
+        </profile>
+
+        <profile>
+            <id>licenses</id>
+
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.ignite</groupId>
+                    <artifactId>ignite-apache-license-gen</artifactId>
+                    <version>${project.version}</version>
+                    <scope>test</scope><!-- hack to have ignite-apache-license-gen at first place at mvn reactor -->
+                </dependency>
+            </dependencies>
+
+            <build>
+                <plugins>
+                    <plugin><!-- generates dependencies licenses -->
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-remote-resources-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>ignite-dependencies</id>
+                                <goals>
+                                    <goal>process</goal>
+                                </goals>
+                                <configuration>
+                                    <resourceBundles>
+                                        <resourceBundle>org.apache.ignite:ignite-apache-license-gen:${project.version}
+                                        </resourceBundle>
+                                    </resourceBundles>
+                                    <excludeTransitive>true</excludeTransitive>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <version>1.7</version>
+                        <executions>
+                            <execution>
+                                <id>licenses-file-rename</id>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <phase>compile</phase>
+                                <configuration>
+                                    <target>
+                                        <!-- moving licenses generated by "ignite-dependencies" -->
+                                        <move file="${basedir}/target/classes/META-INF/licenses.txt" tofile="${basedir}/target/licenses/${project.artifactId}-licenses.txt"/>
+                                    </target>
+                                    <failOnError>false</failOnError>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>m2e</id>
+            <!--This profile is activated when eclipse interacts with maven (using m2e).-->
+            <activation>
+                <property>
+                    <name>m2e.version</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <!--eclipse do not support duplicated package-info.java, in both src and test.-->
+                        <artifactId>maven-compiler-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>default-testCompile</id>
+                                <phase>test-compile</phase>
+                                <configuration>
+                                    <testExcludes>
+                                        <exclude>**/package-info.java</exclude>
+                                    </testExcludes>
+                                </configuration>
+                                <goals>
+                                    <goal>testCompile</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+                <pluginManagement>
+                    <plugins>
+                        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+                        <plugin>
+                            <groupId>org.eclipse.m2e</groupId>
+                            <artifactId>lifecycle-mapping</artifactId>
+                            <version>1.0.0</version>
+                            <configuration>
+                                <lifecycleMappingMetadata>
+                                    <pluginExecutions>
+                                        <pluginExecution>
+                                            <pluginExecutionFilter>
+                                                <groupId>org.apache.maven.plugins</groupId>
+                                                <artifactId>maven-antrun-plugin</artifactId>
+                                                <versionRange>[1.7,)</versionRange>
+                                                <goals>
+                                                    <goal>run</goal>
+                                                    <goal>properties-augmentation</goal>
+                                                    <goal>licenses-file-rename</goal>
+                                                </goals>
+                                            </pluginExecutionFilter>
+                                            <action>
+                                                <ignore></ignore>
+                                            </action>
+                                        </pluginExecution>
+                                        <pluginExecution>
+                                            <pluginExecutionFilter>
+                                                <groupId>org.codehaus.mojo</groupId>
+                                                <artifactId>flatten-maven-plugin</artifactId>
+                                                <versionRange>1.0.1</versionRange>
+                                                <goals>
+                                                    <goal>flatten</goal>
+                                                </goals>
+                                            </pluginExecutionFilter>
+                                            <action>
+                                                <ignore></ignore>
+                                            </action>
+                                        </pluginExecution>
+                                        <pluginExecution>
+                                            <pluginExecutionFilter>
+                                                <groupId>org.codehaus.mojo</groupId>
+                                                <artifactId>exec-maven-plugin</artifactId>
+                                                <versionRange>[1.3.2,)</versionRange>
+                                                <goals>
+                                                    <goal>java</goal>
+                                                    <goal>default</goal>
+                                                </goals>
+                                            </pluginExecutionFilter>
+                                            <action>
+                                                <ignore></ignore>
+                                            </action>
+                                        </pluginExecution>
+                                    </pluginExecutions>
+                                </lifecycleMappingMetadata>
+                            </configuration>
+                        </plugin>
+                    </plugins>
+                </pluginManagement>
+            </build>
+        </profile>
+    </profiles>
+</project>
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..e5fb47f
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,416 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+    POM file.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.ignite</groupId>
+        <artifactId>ignite-parent</artifactId>
+        <version>1</version>
+        <relativePath>parent</relativePath>
+    </parent>
+
+    <artifactId>apache-ignite-extensions</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <scm>
+        <url>https://gitbox.apache.org/repos/asf/ignite-extensions.git</url>
+        <connection>scm:git:https://gitbox.apache.org/repos/asf/ignite-extensions.git</connection>
+        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/ignite-extensions.git</developerConnection>
+        <tag>HEAD</tag>
+    </scm>
+
+    <modules>
+        <module>modules/flink-ext</module>
+    </modules>
+
+    <profiles>
+
+        <profile>
+            <id>test</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <version>2.4</version>
+                        <inherited>false</inherited>
+                        <executions>
+                            <execution>
+                                <id>test</id>
+                                <phase>prepare-package</phase>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                                <configuration>
+                                    <descriptors>
+                                        <descriptor>assembly/test.xml</descriptor>
+                                    </descriptors>
+                                    <outputDirectory>${basedir}</outputDirectory>
+                                    <finalName>libs</finalName>
+                                    <appendAssemblyId>false</appendAssemblyId>
+                                    <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>javadoc</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>build-helper-maven-plugin</artifactId>
+                        <version>3.0.0</version>
+                        <executions>
+                            <execution>
+                                <id>timestamp-property</id>
+                                <goals>
+                                    <goal>timestamp-property</goal>
+                                </goals>
+                                <phase>validate</phase>
+                                <configuration>
+                                    <name>current.year</name>
+                                    <pattern>yyyy</pattern>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-javadoc-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>core-javadoc</id>
+                                <goals>
+                                    <goal>aggregate</goal>
+                                </goals>
+                                <phase>validate</phase>
+                                <configuration>
+                                    <reportOutputDirectory>${basedir}/target/javadoc</reportOutputDirectory>
+                                    <destDir>core</destDir>
+                                    <subpackages>org.apache.ignite -exclude org.apache.ignite.codegen:org.apache.ignite.examples:org.apache.ignite.internal:org.apache.ignite.schema:org.apache.ignite.tests:org.apache.ignite.tools:org.apache.ignite.util:org.apache.ignite.spi.discovery.tcp.messages:org.apache.ignite.spi.discovery.tcp.internal:org.apache.ignite.spi.communication.tcp.internal:org.apache.ignite.spi.discovery.zk.internal:org.apache.ignite.spi.deployment.uri.scanners:org.apache. [...]
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <version>1.7</version>
+                        <inherited>false</inherited>
+                        <dependencies>
+                            <dependency>
+                                <groupId>org.apache.ignite</groupId>
+                                <artifactId>ignite-tools</artifactId>
+                                <version>${project.version}</version>
+                            </dependency>
+                        </dependencies>
+                        <executions>
+                            <execution>
+                                <id>javadoc-postprocessing-new</id>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <phase>initialize</phase>
+                                <configuration>
+                                    <target>
+                                        <copy todir="${basedir}/target/javadoc/core">
+                                            <fileset dir="assembly/docfiles">
+                                                <include name="img/**" />
+                                                <include name="*.js" />
+                                            </fileset>
+                                        </copy>
+
+                                            <taskdef name="doctask" classname="org.apache.ignite.tools.ant.beautifier.GridJavadocAntTask" />
+
+                                            <doctask css="dotted" dir="target/javadoc/core">
+                                                <include name="**/*.html" />
+                                                <exclude name="overview-frame.html" />
+                                                <exclude name="allclasses-frame.html" />
+                                                <exclude name="**/class-use/*" />
+                                            </doctask>
+                                    </target>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+      <profile>
+            <id>licenses</id>
+            <build>
+                <plugins>
+                    <plugin><!-- skipping generation of dependencies licenses
+                     to keep clean /maven-shared-archive-resources/META-INF
+                     to prevent license.txt moving to sources.zip -->
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-remote-resources-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>ignite-dependencies</id>
+                                <goals>
+                                    <goal>process</goal>
+                                </goals>
+                                <configuration>
+                                    <skip>true</skip>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>release</id>
+            <build>
+                <plugins>
+                     <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <version>1.7</version>
+                        <inherited>false</inherited>
+                        <dependencies>
+                            <dependency>
+                                <groupId>org.apache.ignite</groupId>
+                                <artifactId>ignite-tools</artifactId>
+                                <version>${project.version}</version>
+                            </dependency>
+                        </dependencies>
+                        <executions>
+                            <execution>
+                                <id>release-postprocessing</id>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <phase>initialize</phase>
+                                <configuration>
+                                    <target>
+                                        <replaceregexp byline="true">
+                                            <regexp pattern="pushd &quot;%~dp0&quot;/\.\./\.\.(\s*&amp;::.+)?" />
+                                            <substitution expression="pushd &quot;%~dp0&quot;/.." />
+                                            <fileset dir="${basedir}/target/release-package-${ignite.edition}/bin">
+                                                <include name="**/*.bat" />
+                                            </fileset>
+                                        </replaceregexp>
+
+                                        <replaceregexp byline="true">
+                                            <regexp pattern="IGNITE_HOME_TMP=&quot;\$\(dirname &quot;\$\{IGNITE_HOME_TMP\}&quot;\)&quot;(\s*#.*)?" />
+                                            <substitution expression="" />
+                                            <fileset dir="${basedir}/target/release-package-${ignite.edition}/bin">
+                                                <include name="**/*.sh" />
+                                            </fileset>
+                                        </replaceregexp>
+
+                                        <replaceregexp byline="true">
+                                            <regexp pattern="set SCRIPTS_HOME=%IGNITE_HOME%\\bin(\s*&amp;::.*)?" />
+                                            <substitution expression="set SCRIPTS_HOME=%IGNITE_HOME%\\\\bin" />
+                                            <fileset dir="${basedir}/target/release-package-${ignite.edition}/bin">
+                                                <include name="**/*.bat" />
+                                            </fileset>
+                                        </replaceregexp>
+
+                                        <replaceregexp byline="true">
+                                            <regexp pattern="SCRIPTS_HOME=&quot;\$\{IGNITE_HOME_TMP\}/bin&quot;(\s*#.*)?" />
+                                            <substitution expression="SCRIPTS_HOME=&quot;$${IGNITE_HOME_TMP}/bin&quot;" />
+                                            <fileset dir="${basedir}/target/release-package-${ignite.edition}/bin">
+                                                <include name="**/*.sh" />
+                                            </fileset>
+                                        </replaceregexp>
+
+                                        <replaceregexp byline="true">
+                                            <regexp pattern="\. &quot;\$\{SCRIPTS_HOME\}&quot;/include/build-classpath.sh(\s*#.*)?" />
+                                            <substitution expression="" />
+                                            <fileset dir="${basedir}/target/release-package-${ignite.edition}/bin">
+                                                <include name="**/*.sh" />
+                                            </fileset>
+                                        </replaceregexp>
+
+                                        <replaceregexp byline="true">
+                                            <regexp pattern="call &quot;%SCRIPTS_HOME%\\include\\build-classpath.bat&quot;(\s*&amp;::.*)?" />
+                                            <substitution expression="" />
+                                            <fileset dir="${basedir}/target/release-package-${ignite.edition}/bin">
+                                                <include name="**/*.bat" />
+                                            </fileset>
+                                        </replaceregexp>
+
+                                        <replaceregexp byline="true">
+                                            <regexp pattern="ENABLE_ASSERTIONS=.*" />
+                                            <substitution expression="ENABLE_ASSERTIONS=&quot;0&quot;" />
+                                            <fileset dir="${basedir}/target/release-package-${ignite.edition}/bin">
+                                                <include name="**/*.sh" />
+                                            </fileset>
+                                        </replaceregexp>
+
+                                        <replaceregexp byline="true">
+                                            <regexp pattern="ENABLE_ASSERTIONS=.*" />
+                                            <substitution expression="ENABLE_ASSERTIONS=0" />
+                                            <fileset dir="${basedir}/target/release-package-${ignite.edition}/bin">
+                                                <include name="**/*.bat" />
+                                            </fileset>
+                                        </replaceregexp>
+
+                                        <replaceregexp byline="true">
+                                            <regexp pattern="-DIGNITE_UPDATE_NOTIFIER=false" />
+                                            <substitution expression="" />
+                                            <fileset dir="${basedir}/target/release-package-${ignite.edition}/bin">
+                                                <include name="**/*.sh" />
+                                                <include name="**/*.bat" />
+                                            </fileset>
+                                        </replaceregexp>
+
+                                        <replaceregexp file="${basedir}/target/release-package-${ignite.edition}/examples/pom.xml" byline="true">
+                                            <regexp pattern="to_be_replaced_by_ignite_version" />
+                                            <substitution expression="${project.version}" />
+                                        </replaceregexp>
+
+                                        <replaceregexp file="${basedir}/target/release-package-${ignite.edition}/benchmarks/sources/pom.xml" byline="true">
+                                            <regexp pattern="to_be_replaced_by_ignite_version" />
+                                            <substitution expression="${project.version}" />
+                                        </replaceregexp>
+
+                                        <chmod dir="${basedir}/target/release-package-${ignite.edition}" perm="755" includes="**/*.sh" />
+
+                                        <!--
+                                        Line ending bugfix for builds packaged in MS Windows machine to adjust Linux based
+                                        end-of-line characters for Linux shell scripts
+                                        -->
+                                        <fixcrlf srcdir="${basedir}/target/release-package-${ignite.edition}" eol="lf" eof="remove">
+                                            <include name="**/*.sh" />
+                                        </fixcrlf>
+
+                                        <zip destfile="${basedir}/target/bin/${ignite.edition}-${project.version}-bin.zip" encoding="UTF-8">
+                                            <zipfileset dir="${basedir}/target/release-package-${ignite.edition}" prefix="${ignite.edition}-${project.version}-bin" filemode="755">
+                                                <include name="**/*.sh" />
+                                                <include name="**/configure" />
+                                                <include name="**/install-sh" />
+                                                <include name="**/compile" />
+                                                <include name="**/missing" />
+                                            </zipfileset>
+                                            <zipfileset dir="${basedir}/target/release-package-${ignite.edition}" prefix="${ignite.edition}-${project.version}-bin">
+                                                <exclude name="**/*.sh" />
+                                                <exclude name="**/configure" />
+                                                <exclude name="**/install-sh" />
+                                                <exclude name="**/compile" />
+                                                <exclude name="**/missing" />
+                                            </zipfileset>
+                                        </zip>
+                                    </target>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <version>2.4</version>
+                        <inherited>false</inherited>
+                        <executions>
+                            <execution>
+                                <id>ignite-dependencies</id>
+                                <phase>validate</phase>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                                <configuration>
+                                    <descriptors>
+                                        <descriptor>${basedir}/assembly/dependencies-${ignite.edition}.xml</descriptor>
+                                    </descriptors>
+                                    <outputDirectory>${basedir}/target/release-package-${ignite.edition}</outputDirectory>
+                                    <finalName>libs</finalName>
+                                    <appendAssemblyId>false</appendAssemblyId>
+                                </configuration>
+                            </execution>
+
+                            <execution>
+                                <id>ignite-release</id>
+                                <phase>validate</phase>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                                <configuration>
+                                    <descriptors>
+                                        <descriptor>assembly/release-${ignite.edition}.xml</descriptor>
+                                    </descriptors>
+                                    <finalName>release-package-${ignite.edition}</finalName>
+                                    <appendAssemblyId>false</appendAssemblyId>
+                                </configuration>
+                            </execution>
+
+
+                        </executions>
+                    </plugin>
+
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-deploy-plugin</artifactId>
+                        <configuration>
+                            <skip>true</skip>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+    </profiles>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-clean-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>clean</phase>
+                        <goals>
+                            <goal>clean</goal>
+                        </goals>
+                        <configuration>
+                            <filesets>
+                                <fileset>
+                                    <directory>libs</directory>
+                                </fileset>
+                            </filesets>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>