K'uk'ulkan ("Feathered Serpent") is the name of a deity which was worshipped by the Yucatec maya people. You can read a lot more in books or on the Internet about it and will see that, in someways, is related to the wind and water.
Beyond the origin of this name I reused to name this project, Kukulcan provides an API and different sort of REPLs to interact with your streams or administer your Apache Kafka deployment.
It supports POSIX and Windows OS and Scala, Java and Python programming languages.
As Kafka users (developers, devops, etc.), we have to interact with it in different ways. Maybe using the command-line tools it provides, an external tool to look for a specific info, an IDE to develop a snippet in order to test something... but what if you could do all those things in the same interface with the flexibility of a REPL to do exactly what you need?
This is the aim of this project: enabling a simple interface to interact with your Kafka cluster taking advantage of its rich API plus some additional utils included and make your interaction better.
Before starting, you'll need to have installed JDK 11 and SBT. Additionally, if you want to use the PyKukulcan REPL, you'll also need Python (tested 2.7, 3.4, 3.5, 3.6, and 3.7 versions) and pip installed.
Just clone the kukulcan
repo and "kukulcan-it":
git clone https://github.com/mmolimar/kukulcan.git && cd kukulcan
sbt kukulcan
In the config
directory, you'll find some files with the configurations for each of the APIs Kukulcan provides.
All the possible configs for each API are in these files with their description so, if you need to set some
specific configs for your environment, you should set them there before starting.
Also, there is an important environment variable named KUKULCAN_HOME
. If not set, its default value will be
the root folder of the cloned project. When starting a Kukulcan REPL, it will look for this environment variable
and read the properties files contained in its config
subdirectory.
The project contains three subprojects or modules described below but, if you generate the Scala docs executing
sbt doc
in the command line, you'll be able to see a more detailed description.
Contains all the Scala and Java classes to interact with Kafka and extending the Kafka API to enable new functionalities. This API contains:
- KAdmin: grouped utils for administrative operations for topics, configs, ACLs and metrics.
- KConnect: methods to execute requests against Kafka Connect REST API.
- KConsumer and KProducer: Kafka consumer/producer with some extra features.
- KStreams: extends Kafka Streams to see how your topology is (printing it in a graph).
- KSchemaRegistry: to interact and manage schemas in Confluent Schema Registry.
- KKsql: client for querying Confluent KSQL server and integrated with the KSQL-CLI.
Enables two sort of entry points for the REPLs: one based on the Scala REPL and the other based on JShell.
Additionally, it includes the logic to read and reload
your configurations stored the config
directory
transparently.
This module includes the needed bindings to use Kukulcan with Python via py4j. By now, the only bindings available are for the REPL (in Java).
Kukulcan takes advantage of multiple functionalities we already have in Java, Scala and other tools to build a custom REPL. Actually, the project enables four type of REPLs with Ammonite, Scala, JShell and Python.
After building the source, you'll be able to start any of the following REPL options. Here are a few examples you can do with Kukulcan:
-
Graphical representation of a topology in Kafka Streams:
-
Kafka Connect interaction:
-
Managing schemas in Schema Registry:
-
Interacting with KSQL server and using the KSQL-CLI:
NOTE: The REPLs have already the Kukulcan imports:
com.github.mmolimar.kukulcan
in case of the Scala and Ammonite REPLs andcom.github.mmolimar.kukulcan.Kukulcan
in case of the JShell REPL. So you just have to start typingkukulcan.<option>.
orKukulcan.<option>.
respectively.
Ammonite is an improved Scala REPL with a lot of interesting features you can find very useful to load scripts or even code in an easier way. Obviously, you must install it previously.
It already includes all dependencies, and the Kukulcan Scala API to interact with Kafka.
NOTE: If you're going to use Kukulcan with Ammonite, you'll have to publish the project in local, executing
sbt publishLocal
.
To execute this REPL you just have to type:
./bin/kukulcan-amm
I do recommend using this REPL even though the other ones are fine as well. The only drawback here is that Ammonite-REPL does not support Windows systems.
A Scala REPL including all dependencies and the Kukulcan Scala API to interact with Kafka.
To execute this REPL you just have to type:
./bin/kukulcan
For Windows OS:
bin\kukulcan.cmd
An enriched Java JShell to interact with Kafka including all dependencies and imports from the Kukulcan Java API.
To execute this REPL you just have to type:
./bin/jkukulcan
For Windows OS:
bin\jkukulcan.cmd
A Python shell including the needed bindings with Kukulcan Scala API via Py4J.
NOTE: If you're going to use the PyKukulcan REPL, you must have Python and pip installed. Then, install
pykukulcan
in this way:pip install python/ -r python/requirements.txt
To execute this REPL you just have to type:
./bin/pykukulcan
For Windows OS:
bin\pykukulcan.cmd
- Tools in the KAdmin API.
- Integration with REST Proxy.
- API for Python.
- Source Code: https://github.com/mmolimar/kukulcan
- Issue Tracker: https://github.com/mmolimar/kukulcan/issues
Released under the Apache License, version 2.0.