All Projects → mmolimar → vkitm

mmolimar / vkitm

Licence: Apache-2.0 license
A native Kafka protocol proxy for Apache Kafka

Programming Languages

scala
5932 projects

Projects that are alternatives of or similar to vkitm

F1-demo
Real-time vehicle telematics analytics demo using OmniSci
Stars: ✭ 27 (+42.11%)
Mutual labels:  apache-kafka
kafkaer
Template based Kafka topic/cluster/ACL management
Stars: ✭ 37 (+94.74%)
Mutual labels:  apache-kafka
brave-kafka-interceptor
Kafka Interceptor for Zipkin
Stars: ✭ 30 (+57.89%)
Mutual labels:  apache-kafka
kafka-connect-fs
Kafka Connect FileSystem Connector
Stars: ✭ 107 (+463.16%)
Mutual labels:  apache-kafka
spark-twitter-sentiment-analysis
Sentiment Analysis of a Twitter Topic with Spark Structured Streaming
Stars: ✭ 55 (+189.47%)
Mutual labels:  apache-kafka
kafka-twitter-spark-streaming
Counting Tweets Per User in Real-Time
Stars: ✭ 38 (+100%)
Mutual labels:  apache-kafka
Kafka Ui
Open-Source Web GUI for Apache Kafka Management
Stars: ✭ 230 (+1110.53%)
Mutual labels:  apache-kafka
incubator-rocketmq
带中文代码注释 Mirror of Apache RocketMQ 源码解析:http://www.iocoder.cn/categories/RocketMQ/?github
Stars: ✭ 343 (+1705.26%)
Mutual labels:  apache-kafka
ksql-jdbc-driver
JDBC driver for Apache Kafka
Stars: ✭ 85 (+347.37%)
Mutual labels:  apache-kafka
esque
esque - an operational kafka tool.
Stars: ✭ 22 (+15.79%)
Mutual labels:  apache-kafka
fink-broker
Astronomy Broker based on Apache Spark
Stars: ✭ 18 (-5.26%)
Mutual labels:  apache-kafka
kafkaSaur
Apache Kafka client for Deno
Stars: ✭ 42 (+121.05%)
Mutual labels:  apache-kafka
pulsar-io-kafka
Pulsar IO Kafka Connector
Stars: ✭ 24 (+26.32%)
Mutual labels:  apache-kafka
kafka role
Ansible role to install Apache Kafka
Stars: ✭ 18 (-5.26%)
Mutual labels:  apache-kafka
kafka-serialization
Lego bricks to build Apache Kafka serializers and deserializers
Stars: ✭ 122 (+542.11%)
Mutual labels:  apache-kafka
kafka-topic-view
A simple UI for monitoring Apache Kafka topics and their state.
Stars: ✭ 17 (-10.53%)
Mutual labels:  apache-kafka
dagger
Dagger is an easy-to-use, configuration over code, cloud-native framework built on top of Apache Flink for stateful processing of real-time streaming data.
Stars: ✭ 238 (+1152.63%)
Mutual labels:  apache-kafka
formula1-telemetry-kafka
No description or website provided.
Stars: ✭ 99 (+421.05%)
Mutual labels:  apache-kafka
vault-plugin-secrets-kafka
A vault plugin for generating ACLs for dynamic users
Stars: ✭ 20 (+5.26%)
Mutual labels:  apache-kafka
southpaw
⚾ Streaming left joins in Kafka for change data capture
Stars: ✭ 48 (+152.63%)
Mutual labels:  apache-kafka

VKitM - Virtual Kafka in the Middle Build StatusCoverage Status

VKitM is a Apache Kafka proxy which uses the native Kafka protocol.

Its name is due to how it has been designed: the application acts as an intermediary between the Kafka client and the Kafka cluster, modifying the requests and responses from/to the client. Actually, the client thinks that the connection is to a Kafka cluster (by now, with one node) and doesn't know what's behind (an entirely Kafka cluster).

Right now, the implementation includes a subset of the API Keys but can produce and consume messages.

How it works

  1. Kafka client connects to a single Kafka broker. Actually, it's connecting to a VKitM.
  2. VKitM modifies the request, depending of the API Key.
  3. The modified request is sent to the actual Kafka cluster, if applicable.
  4. VKitM receives the response from the Kafka brokers.
  5. Based on the kind of response it has to send to the client, VKitM changes data related with brokers, partition leaders and other metadata in the final response.
  6. The client receives the response thinking that there is just one node in the cluster and continues.

DISCLAIMER: This application has been implemented in order to provide another option when a proxy is required. If you use VKitM with a different purpose from the one has been designed it's under your own responsibility.

Motivation

There are multiple Kafka proxies out there but most of them are HTTP REST based. A well-known REST Proxy is this one.

However, most of them lack of some of the following features I'd like to provide in VKitM:

  • Use the native Kafka protocol directly, improving the performance.
  • Be able to modify the messages from the clients on the fly when we cannot do it in the client itself (due to business cases or whatever) including interceptors.
  • Define custom ACLs to complement those that already exist (or maybe not) in the Kafka Cluster.
  • Change the kind of protocol in your clients (secured or not). I.e.: using TLS connection from the clients to VKitM and from VKitM to Kafka brokers in plaintext (or vice versa) or even change the certificates they use.

Getting started

Building source jar

gradle clean build

Run VKitM

java -jar build/libs/vkitm-{VERSION}.jar src/main/resources/application.conf

NOTE: modify src/main/resources/application.conf file, if applies, to your custom configuration.

Docker

You can run VKitM inside a Docker container. Use the image hosted in Docker Hub or just build your own one.

Building the image

docker build -t mmolimar/vkitm --build-arg VERSION=<VERSION> .

Run VKitM inside a container

docker run -p <HOST_PORT>:<CONTAINER_PORT> -v /path/to/conf/directory:/vkitm/conf mmolimar/vkitm

NOTE: path /path/to/conf/directory must contain a file named application.conf with the VKitM configuration.

Future work

  • Implement most of the Kafka protocol API Keys.
  • Develop a VKitM cluster, avoiding SPOF (Single Point Of Failure) which now exists.

Contribute

License

Released under the Apache License, version 2.0.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].