Ziggurat is a framework built to simplify stream processing on Kafka. It can be used to create a full-fledged Clojure app that reads and processes messages from Kafka. Ziggurat abstracts the following features:
Refer to concepts to understand the concepts referred to in this document.
brew install clojure
brew install leiningen
docker-compose up
. This starts:make test
make setup-cluster
. This clears up the volume and starts:
make test-cluster
. This uses config.test.cluster.edn
instead of config.test.edn
.Add this to your project.clj
:
[tech.gojek/ziggurat "4.11.1"]
_Please refer [clojars](https://clojars.org/tech.gojek/ziggurat) for the latest stable version_
To start a stream (a thread that reads messages from Kafka), add this to your core namespace.
```clojure
(require '[ziggurat.init :as ziggurat])
(defn start-fn []
;; your logic that runs at startup goes here
)
(defn stop-fn []
;; your logic that runs at shutdown goes here
)
(defn main-fn
[{:keys [message metadata] :as message-payload}]
(println message)
:success)
(def handler-fn
(-> main-fn
(middleware/protobuf->hash ProtoClass :stream-id)))
;; Here ProtoClass refers to the fully qualified name of the Java class which the code is used to de-serialize the message.
(ziggurat/main start-fn stop-fn {:stream-id {:handler-fn handler-fn}})
NOTE: this example assumes that the message is serialized in Protobuf format
Please refer the Middleware section for understanding handler-fn
here.
:stream-id
is a unique identifier per stream which needs to be included in config.edn file(ziggurat/main start-fn stop-fn {:stream-id-1 {:handler-fn handler-fn-1}
:stream-id-2 {:handler-fn handler-fn-2}})
(require '[ziggurat.init :as ziggurat])
(defn start-fn []
;; your logic that runs at startup goes here
)
(defn stop-fn []
;; your logic that runs at shutdown goes here
)
(defn api-handler [_request]
{:status 200
:headers {"Content-Type" "application/json"}
:body (get-resource)})
(def routes [["v1/resources" {:get api-handler}]])
(defn main-fn
[{:keys [message metadata] :as message-payload}]
(println message)
:success)
(def handler-fn
(-> main-fn
(middleware/protobuf->hash ProtoClass :stream-id)))
(ziggurat/main start-fn stop-fn {:stream-id {:handler-fn handler-fn}} routes)
NOTE: this example assumes that the message is serialized in Protobuf format
Copyright 2018, GO-JEK Tech <http://gojek.tech>
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.
Can you improve this documentation? These fine people already did:
Anirudh, prateek.khatri, Kartik Gupta, Michael Angelo Calimlim, vruttantmankad, shubhang.balkundi, Rooba Limsa, mjayprateek, anmol1vw13, Sandilya Jandhyala, Anirudh Vyas, Saptanto Sindu, Akash Chhabra, Indrajith Indraprastham, Wito Chandra, Prateek Khatri, Shubhang Balkundi, Lakshya Gupta, Anmol Vijaywargiya, Gurupratap, WickedBrat, williamChang80, led & s7saxenaEdit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close