Giter Site home page Giter Site logo

kafbat / kafka-ui Goto Github PK

View Code? Open in Web Editor NEW
466.0 8.0 45.0 34.64 MB

Open-Source Web UI for managing Apache Kafka clusters

Home Page: http://ui.docs.kafbat.io

License: Apache License 2.0

Dockerfile 0.02% ANTLR 0.66% Java 56.86% CSS 0.03% JavaScript 0.06% HTML 0.07% TypeScript 42.31% SCSS 0.01%
apache-kafka big-data cluster-management event-streaming hacktoberfest kafka kafka-brokers kafka-client kafka-cluster kafka-connect

kafka-ui's Introduction

logo

Kafbat UI

Versatile, fast and lightweight web UI for managing Apache Kafka® clusters.

License price free latest release version discord online number count

DocumentationQuick StartCommunity
AWS MarketplaceProductHunt

stats

Kafbat UI is a free, open-source web UI to monitor and manage Apache Kafka clusters.

Kafbat UI is a simple tool that makes your data flows observable, helps find and troubleshoot issues faster and deliver optimal performance. Its lightweight dashboard makes it easy to track key metrics of your Kafka clusters - Brokers, Topics, Partitions, Production, and Consumption.

Kafbat UI, developed by Kafbat*, proudly carries forward the legacy of the UI Apache Kafka project. Our dedication is reflected in the continuous evolution of the project, ensuring adherence to its foundational vision while adapting to meet modern demands. We extend our gratitude to Provectus for their past support in groundbreaking work, which serves as a cornerstone for our ongoing innovation and dedication.

* - The Kafbat team comprises key contributors from the project's inception, bringing a wealth of experience and insight to this renewed endeavor.

Interface

Interface

Features

  • Multi-Cluster Management — monitor and manage all your clusters in one place
  • Performance Monitoring with Metrics Dashboard — track key Kafka metrics with a lightweight dashboard
  • View Kafka Brokers — view topic and partition assignments, controller status
  • View Kafka Topics — view partition count, replication status, and custom configuration
  • View Consumer Groups — view per-partition parked offsets, combined and per-partition lag
  • Browse Messages — browse messages with JSON, plain text, and Avro encoding
  • Dynamic Topic Configuration — create and configure new topics with dynamic configuration
  • Configurable Authentificationsecure your installation with optional Github/Gitlab/Google OAuth 2.0
  • Custom serialization/deserialization plugins - use a ready-to-go serde for your data like AWS Glue or Smile, or code your own!
  • Role based access control - manage permissions to access the UI with granular precision
  • Data masking - obfuscate sensitive data in topic messages

Feature overview

Click here for the feature overview

The Interface

Kafbat UI wraps major functions of Apache Kafka with an intuitive user interface.

Interface

Topics

Kafbat UI makes it easy for you to create topics in your browser by several clicks, pasting your own parameters, and viewing topics in the list.

Create Topic

It's possible to jump from connectors view to corresponding topics and from a topic to consumers (back and forth) for more convenient navigation. connectors, overview topic settings.

Connector_Topic_Consumer

Messages

Let's say we want to produce messages for our topic. With the Kafbat UI we can send or write data/messages to the Kafka topics without effort by specifying parameters, and viewing messages in the list.

Produce Message

Schema registry

There are 3 supported types of schemas: Avro®, JSON Schema, and Protobuf schemas.

Create Schema Registry

Before producing avro/protobuf encoded messages, you have to add a schema for the topic in Schema Registry. Now all these steps are easy to do with a few clicks in a user-friendly interface.

Avro Schema Topic

Getting Started

To run Kafbat UI, you can use either a pre-built Docker image or build it (or a jar file) yourself.

Quick start (Demo run)

docker run -it -p 8080:8080 -e DYNAMIC_CONFIG_ENABLED=true ghcr.io/kafbat/kafka-ui

Then access the web UI at http://localhost:8080

The command is sufficient to try things out. When you're done trying things out, you can proceed with a persistent installation

Persistent installation

services:
  kafbat-ui:
    container_name: kafbat-ui
    image: ghcr.io/kafbat/kafka-ui:latest
    ports:
      - 8080:8080
    environment:
      DYNAMIC_CONFIG_ENABLED: 'true'
    volumes:
      - ~/kui/config.yml:/etc/kafkaui/dynamic_config.yaml

Please refer to our configuration page to proceed with further app configuration.

Some useful configuration related links

Web UI Cluster Configuration Wizard

Configuration file explanation

Docker Compose examples

Misc configuration properties

Helm charts

Quick start

Building from sources

Quick start with building

Liveliness and readiness probes

Liveliness and readiness endpoint is at /actuator/health.
Info endpoint (build info) is located at /actuator/info.

Configuration options

All the environment variables/config properties could be found here.

Contributing

Please refer to contributing guide, we'll guide you from there.

Support

As we're fully independent, team members contribute in their free time. Your support is crucial for us, if you wish to sponsor us, take a look here

kafka-ui's People

Contributors

5hin0bi avatar anezboretskiy avatar antipova926 avatar apetrovs avatar arthurniedial avatar azatsafin avatar burusha16 avatar david-db88 avatar dependabot-preview[bot] avatar dependabot[bot] avatar gataniel avatar germanosin avatar gneyhabub avatar guzel738 avatar haarolean avatar habrahamyanpro avatar iliax avatar kristi-dev avatar lazzy-panda avatar mchukmarov avatar mgrdich avatar narekmat avatar neirubugz avatar nelydavtyan avatar razizbekyan avatar rustamgimadiev avatar simonyandev avatar vladsenyuta avatar winnie-chiu avatar workshur avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kafka-ui's Issues

Wizard: No enum constant com.provectus.kafka.ui.model.ActionDTO.view

via provectus/kafka-ui#4308

java.lang.IllegalArgumentException: No enum constant com.provectus.kafka.ui.model.ActionDTO.view
        at java.base/java.lang.Enum.valueOf(Enum.java:273)
        Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyExceptio**

TODO: Come up with a way to treat these enums with ignoring the case (view = VIEW)

Impl details:

A config like this:

        - resource: clusterconfig
          value: ".*"
          actions: all

when accessed via wizard and mapped via PropertiesMapper in ApplicationConfigController fails with the aforementioned exception as it tried to map 1:1 without ignoring the case.

Also, it tried to map the "all" action as well which doesn't exist in the enum.

Brokers: Configs: Improvements

  • display friendly units (sizes, time units)

All keys with ".bytes" in the name are sizes
All keys with ".ms" in the name are time units

  • replace enums with human friendly string for source tooltips
image Just use the human readable values, like DEFAULT_CONFIG -> "Default config"
  • Display "changed first" (based on source)

Order priority:

  1. DYNAMIC_* source
  2. STATIC_BROKER_CONFIG source
  3. DEFAULT_CONFIG being last
  4. UNKNOWN
  • Allow manual sorting by source

  • Mask sensitive params values by default (isSensitive: true)

  • Make r/o fields (isReadOnly: true) uneditable (disable the button with "Property is read-only" tooltip)

Replace checkstyle plugin

We require a viable solution to fix the checkstyle errors right in IDE. Currently you have to compile and visit each class present in logs.
This should work something like eslint/prettier with visual indication of invalidly formatted lines.

Split build & upload jobs

Currently build and uploading (or other stuff) is always a one job within
a workflow. So if something fails, it has to be rebuilt. We need to split
build and upload functions. Use upload/dl artifact action to transfer the
build between the jobs.

Topics: Azure: Unable to get topic configs if one topic does not have sufficient permissions

Kafka UI fails to display topics if its credentials have access to a subset of Azure Event Hubs existing in the same namespace.

Basically the use case is like this:
There are multiple Azure Event Hubs in the same namespace. There are used by different teams. Every team has access to a subset of Event Hubs (topics) and uses corresponding credentials. Everything works perfectly fine except Kafka UI. It displays no topics.

provectus/kafka-ui#4300

Refactor maven profiles

Current issues:

  1. Some users need an API build without a frontend. There's a "skipuibuild" property for that. Doesn't seem optimal.
  2. Local build doesn't build frontend, which is usually required for a local run. Prod profile, on the other hand, builds a docker image, no way to easily disable this. Which is usually not require for a local run.

FE: ACL management

Currently, we have r/o ACL management, this issue is aimed at implementing a r/w ability.

Online partition count is red

https://discord.com/channels/897805035122077716/1197881542052159608

IMG_2588

brokers.json:

[
    {
        "id": 1,
        "host": "test-region-1-broker-1.kafka",
        "port": 9092,
        "bytesInPerSec": null,
        "bytesOutPerSec": null,
        "partitionsLeader": 18,
        "partitions": 110,
        "inSyncPartitions": 110,
        "partitionsSkew": 0.0,
        "leadersSkew": -1.8
    },
    {
        "id": 2,
        "host": "test-region-1-broker-2.kafka",
        "port": 9092,
        "bytesInPerSec": null,
        "bytesOutPerSec": null,
        "partitionsLeader": 18,
        "partitions": 110,
        "inSyncPartitions": 110,
        "partitionsSkew": 0.0,
        "leadersSkew": -1.8
    },
    {
        "id": 3,
        "host": "test-region-1-broker-3.kafka",
        "port": 9092,
        "bytesInPerSec": null,
        "bytesOutPerSec": null,
        "partitionsLeader": 18,
        "partitions": 110,
        "inSyncPartitions": 110,
        "partitionsSkew": 0.0,
        "leadersSkew": -1.8
    },
    {
        "id": 4,
        "host": "test-region-2-broker-1.kafka",
        "port": 9092,
        "bytesInPerSec": null,
        "bytesOutPerSec": null,
        "partitionsLeader": 19,
        "partitions": 110,
        "inSyncPartitions": 110,
        "partitionsSkew": 0.0,
        "leadersSkew": 3.6
    },
    {
        "id": 5,
        "host": "test-region-2-broker-2.kafka",
        "port": 9092,
        "bytesInPerSec": null,
        "bytesOutPerSec": null,
        "partitionsLeader": 18,
        "partitions": 110,
        "inSyncPartitions": 110,
        "partitionsSkew": 0.0,
        "leadersSkew": -1.8
    },
    {
        "id": 6,
        "host": "test-region-2-broker-3.kafka",
        "port": 9092,
        "bytesInPerSec": null,
        "bytesOutPerSec": null,
        "partitionsLeader": 19,
        "partitions": 110,
        "inSyncPartitions": 110,
        "partitionsSkew": 0.0,
        "leadersSkew": 3.6
    }  
]

stats.json:

{
    "brokerCount": 6,
    "zooKeeperStatus": null,
    "activeControllers": 3,
    "onlinePartitionCount": 110,
    "offlinePartitionCount": 0, 
    "inSyncReplicasCount": 660,
    "outOfSyncReplicasCount": 0,
    "underReplicatedPartitionCount": 0,
    "diskUsage": [
        {
            "brokerId": 1, 
            "segmentSize": 15296,
            "segmentCount": 110
        },
        {
            "brokerId": 2, 
            "segmentSize": 15296,
            "segmentCount": 110
        },
        {
            "brokerId": 3, 
            "segmentSize": 15296,
            "segmentCount": 110
        },
        {
            "brokerId": 4, 
            "segmentSize": 15608,
            "segmentCount": 130
        },
        {
            "brokerId": 5, 
            "segmentSize": 15892,
            "segmentCount": 131
        },
        {
            "brokerId": 6, 
            "segmentSize": 15608,
            "segmentCount": 132
        }
    ],
    "version": "2.7-IV2"
}

Audit: ClassCastException when OAuth is enabled

2023-11-02 08:54:56,490 ERROR [parallel-5] r.c.p.Operators: Operator called default onErrorDropped
reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.ClassCastException: Cannot cast
org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser to
org.springframework.security.core.userdetails.UserDetails
Caused by: java.lang.ClassCastException: Cannot cast
org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser to
org.springframework.security.core.userdetails.UserDetails
at java.base/java.lang.Class.cast(Class.java:3889)
at
reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113)
at
reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:158)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1839)
at reactor.core.publisher.MonoCacheTime.subscribeOrReturn(MonoCacheTime.java:151)
at reactor.core.publisher.Mono.subscribe(Mono.java:4480)
at reactor.core.publisher.Mono.subscribeWith(Mono.java:4561)
at reactor.core.publisher.Mono.subscribe(Mono.java:4323)
at com.provectus.kafka.ui.service.audit.AuditService.audit(AuditService.java:186)
at com.provectus.kafka.ui.controller.AbstractController.audit(AbstractController.java:30)
at
com.provectus.kafka.ui.controller.TopicsController.lambda$getTopicDetails$10(TopicsController.java:168)

Rebranding

  1. Get rid of the ugly stuff
  2. Get all the features under the spoiler
  3. Update links
  4. Other refactoring

first issue yolo!

RBAC: Support Active Directory

LdapSecurityConfig:

  • verify ActiveDirectoryLdapAuthenticationProvider does populate authorities properly (most likely, it doesn't)
  • if it doesn't, copy-paste ActiveDirectoryLdapAuthenticationProvider
    and (re)implement a populator (unless #4490 is resolved)

via provectus/kafka-ui#3741

Messages V2: API overhaul

This refactoring should address all the issues related to messages including

  • pagination
  • sorting
  • frontend complexity enshittification

Implement an authentication page

  • Get rid of AuthController, do that on the frontend instead.
  • Get rid of the default spring security login page
  • Leave the csrf endpoint public, call when needed from the frontend.
  • Impl a custom auth page for all the auth methods (oauth, ldap, basic)

Should fix:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.