$ brew install libtool $ brew install pkg-config $ brew install autoconf $ brew install automake
ZeroMQ - OSX installation
After the installation check what is on the $PATH
. Make sure that /usr/local/bin
is first. If not run:
$ export PATH=/usr/local/bin:$PATH
$ which autoconf /usr/local/bin/autoconf $ which automake /usr/local/bin/automake $ which aclocal /usr/local/bin/aclocal
If there are other versions of aclocal
installed, you can get errors like Unknown symbol
(TODO).
Download latest version of 0MQ
(in my case it was 4.1.5)
$ curl -O http://download.zeromq.org/zeromq-4.1.5.tar.gz $ tar zxf zeromq-4.1.4.tar.gz $ cd zeromq-4.1.5 $ ./configure --without-libsodium $ make $ sudo make install
Clone jzmq
- binding for java.
$ git clone https://github.com/zeromq/jzmq.git $ cd jzmq
Build jni
libraries.
$ cd jzmq-jni $ ./autogen.sh $ ./configure $ make $ sudo make install
Build java dependenies and install them in local maven
repository.
$ cd .. $ mvn clean package
Before installing java libraries you have to install gpg
- software for encrypting files.
$ brew install gnupg $ gpg --gen-key
Install libraries in local maven repository:
$ mvn install
jzmq in gradle
jzmq
installs all libraries in /usr/local/lib
path. So set it as java.library.path
system property.
Gradle configuration
Add dependency to 0MQ
library (installed in local maven repo a few commands ago).
dependencies {
// ZeroMQ dependency
compile "org.zeromq:jzmq:3.1.1-SNAPSHOT"
}
Add java.library.path
system property in run
task:
test {
systemProperty "java.library/path", "/usr/local/lib"
}
run {
systemProperty "java.library/path", "/usr/local/lib"
}
== ZMQ and JZMQ in Apache Flink
JZMQ statically loads `JNI` libraries. If you want to call ZMQ services from inside Apache Flink jobs you have to load them once per JVM instance. In fact you have to load them once per Task Manager instance. To do it just put `jzmq.jar` in `$FLINK_HOME/lib` folder on every Task Manager node. In the same time exclude `jzmq` dependencies from your build.
If you use `gradle` `shadow` plugin you can do it like follows:
Define new configuration in your `build.gradle`
[source, groovy]
configurations { jzmq }
dependencies { … jzmq("org.zeromq:jzmq:3.1.1-SNAPSHOT") }
Exclude ZMQ dependencies from the shadow jar: [source, groovy]
shadowJar { dependencies { exclude(dependency { it.moduleGroup == "org.zeromq" }) } }
Add new task for building `JZMQ` jar: [source, groovy]
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar task jzmqJar(type: ShadowJar) { baseName = "jzmq" version = "3.1.1-SNAPSHOT" configurations = [project.configurations.jzmq] }
Build `JZMQ` jar:
$ ./gradlew jzmqJar
and copy generated jar file to `$FLINK_HOME/lib` on every Task Manager. Add configuration of local libraries to `$FLINK_HOME/conf/flink-conf.yaml`
Java options
env.java.opts: "-Djava.library.path=/usr/local/lib"