1. RecordEmitter logic refactored - all polling logic moved RangePollingEmitter. Backward/Forward implementations just chouse how range is calculated for next step.
2. Using consumer.position() method to define that range is fully polled (not empty polls counting deleted)
3. AnalysisTask: calculating progress based on processed offsets, not polled messages (more accurate for compacted topics)
4. Sorting polled messages by ts before sending to frontend
Implemented a Protobuf Raw deserialiser that works like protoc --decode_raw. This is a no config alternative to the existing ProtobufFileSerde.
Co-authored-by: Ilya Kuramshin <iliax@proton.me>
1. Not setting default key serde to SR/Proto if it is not explicitly set.
2. enabling searching connector by connect name
3. switch using serializedKeySize/serializedValueSize methods instead using byte array len check
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
Co-authored-by: David <58771979+David-DB88@users.noreply.github.com>
Co-authored-by: davitbejanyan <dbejanyan@provectus.com>
* Important @Value annotated properties moved to typed classes
---------
Co-authored-by: iliax <ikuramshin@provectus.com>
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
Co-authored-by: VladSenyuta <vlad.senyuta@gmail.com>
* Marked serde-failed messages with red
* added styles on icon position
* added icon for the Key and Value
* changed warning icon position
* changed warning icon and data cell style
* added Ellipsis component
* refactor Ellipsis.tsx
* resolved conflicts
---------
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
Co-authored-by: Oleg Shur <workshur@gmail.com>
* new properties are added on a new line
* added test cases for key and Value Preview filters
* upd produceMessageCheck
---------
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
Co-authored-by: VladSenyuta <vlad.senyuta@gmail.com>
* ISSUE-3144: Spring boot version bump to 3.0.5, snakeyaml upd
* explicit spring security dependency removed
* openapi plugin updated to 6.5
* Some javax.annotation imports migrated to jakarta.annotation
* base container sha specified
* Update CognitoAuthorityExtractor
* Add devcontainer configuration file
* Allow development using github codespace with pre-configuration of the needed dependencies
Signed-off-by: Nisan Ohana <78907315+nisanohana3@users.noreply.github.com>
* Add pull request extention
---------
Signed-off-by: Nisan Ohana <78907315+nisanohana3@users.noreply.github.com>
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
* Redirect the user to the wizard page if no clusters
* added test case
* changed test case for redirect to new cluster config page
* replaced mockedUsedNavigate with mockedNavigate
* added ability to show dashboard if clicking on it
---------
Co-authored-by: Oleg Shur <workshur@gmail.com>
* Update Editor.tsx
reassigning the background
* Update EditorViewer.styled.ts
* Update EditorViewer.styled.ts
changed the code to meet the requirements of the owner
Closes#3576
* Allow sorting consumer groups by messages behind
* Added an additional value through the enum of ConsumerGroupOrdering
* Enabled sorting in the react consumer groups page (by messages behind)
* Moved the message behind calculation logic to InternalConsumerGroup as part of its creation
* Added the messages behind case - sorting internalConsumerGroup according to comparator with messages behind logic
Co-authored-by: Yarden Shoham <hrsi88@gmail.com>
Signed-off-by: nisanohana3 <nisana230@gmail.com>
* bugfix/topics-selection remove selection reset useEffect, reseting only on pageChange
* bugfix/topics-selection implement rowId getter
* bugfix/topics-selection remove quotes from row name property for id generation
* added key format and value format
* comented some test cases
* comented some test cases
* changed test cases
* changed test cases
* swapped key Serde and Value Serde
* in a function clearTopicMessagesHandler added invalidateQueries
* changed redux Topic messages clear with react query call
* changed redux Topic messages clear with react query call on Overview/ActionCell.tsx
* show on alert deleted item
* added s on variable clearMessage
* removed clearTopicMessages action from redux and replace functionality with hook useClearTopicMessages
---------
Co-authored-by: davitbejanyan <dbejanyan@provectus.com>
* change Consumers Topic lable position
* changed conditional padding row with typeScript
* removed table title style from theme, changed TableHeaderConsumerCell style
* changed consumers Table Header Cell and test cases
* refactor ListItem.spec.tsx
* removed data test id
---------
Co-authored-by: davitbejanyan <dbejanyan@provectus.com>
Now if this chart is used as a subchart, the image registry will be taken from `global.imageRegistry` (if it exists).
Signed-off-by: Yarden Shoham <hrsi88@gmail.com>
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
* Feature: Support more complex Protobuf files
The changes in https://github.com/provectus/kafka-ui/pull/2874 added
initial support for using more than 1 Protobuf file in Kafka UI in
absence of a proper schema registry.
This change is building upon that functionality to support more complex
scenarios in which there are multiple Protobuf files being used and not
all of them are explicitly listed (for example imports).
It's using the already present Wire library from Square to do the heavy
lifting and create a comprehensive schema from all Protobuf files and
directories listed in the Kafka UI configuration.
* Refactor schema loading logic and reuse in tests
* Add support for reading Protobufs from ZIP archives
* Remove unused ProtobufFileSerde#toLocation(Path)
* wip
* wip
* wip
* wip
* wip
* wip
* wip
---------
Co-authored-by: Jochen Schalanda <jochen.schalanda@personio.de>
Co-authored-by: iliax <ikuramshin@provectus.com>
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
* [e2e]Checking the URL redirections for kafka-ui pages
* [e2e]Checking the URL redirections for kafka-ui pages
* [e2e]Checking the URL redirections for kafka-ui pages
* [e2e]Checking the URL redirections for kafka-ui pages
* rmv ignore from copyMessageFromTopicProfile
* move @QaseId(21) to manualSuite
---------
Co-authored-by: VladSenyuta <vlad.senyuta@gmail.com>
* set a warning message on copyToClipboard if user use http
* Update kafka-ui-react-app/src/lib/hooks/useDataSaver.ts
* changed custom type whit warning
* added warning title
* added test case for warning message
---------
Co-authored-by: davitbejanyan <dbejanyan@provectus.com>
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
Co-authored-by: Oleg Shur <workshur@gmail.com>
* Now user can only input valid digits, and '-' is not allowed in positive-only inputs.
* Fix ISSUE#3319
Now user can only input valid digits, and '-' is not allowed in positive-only inputs.
* Revert "Fix ISSUE#3319"
This reverts commit a4e34f5af3.
* Fix ISSUE#3319
Created a helper function, and added a unit test to cover it.
* Fix ISSUE#3319
Located the helper function outside the component, and renamed some unit tests to make their meaning more clear.
* Fix ISSUE#3319
- Added an attribute 'integerOnly' to component 'Input', to represent whether this input component instance will accept decimal.
- Improved input-check function and paste-check function, to avoid invalid number format (like '3-3', '3.3.3').
- Added new unit tests to test new input-check and paste-check functions.
- Added attribute 'integerOnly' to Input instances in the TopicForm component.
* [e2e]Checking available custom parameters with Topic editing
* [e2e]Checking Messages count per page within Topic
* [e2e]Checking Messages count per page within Topic.First Fix
* [e2e]Checking Messages count per page within Topic.Issue added
* [e2e]Checking Messages count per page within Topic.Second Fix
* [e2e]Checking Messages count per page within Topic.Second Fix
* [e2e]Checking Messages count per page within Topic.Third Fix
* [e2e]Checking Messages count per page within Topic.Third Fix
* Fix the Preview Modal , Dom Nesting issue inside a Table
* minor modifications to the PreviewModal and rhe row data to get rid of errorsin the console
* add JSONPATH library to implement the parsing with it instead of loadash get
* Display In Sync Replicas (ISR) by Partition on Topic overview (#2703)
* add unit test
---------
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
* [e2e] Create common method for produce message in TopicMessagesTests
* [e2e]TopicTests.purgeMessagesOfTopics : Purge messages of topics. First fix
* [e2e]TopicTests.purgeMessagesOfTopics : Purge messages of topics. First fix
Co-authored-by: Vlad Senyuta <66071557+VladSenyuta@users.noreply.github.com>
Failover clients for SchemaRegistry, Kafka-connect, KSQL:
1. SchemeRegistry openapi client generation
2. WebClient configuration logic moved to WebClientConfigurator class
3. ReactiveFailover utility implemented
4. Connect, Ksql moved to ReactiveFailover usage
1. Add support for predefined (well-known) protobuf types.
2. `preservingProtoFieldNames` mode is enabled for proto messages formatting to fit proto file's message's field names
3. Invalid oneof-processing logic removed
4. Protobuf -> JsonSchema self-reference issue fixed
5. format added to Timestamp protobuf type
* [e2e] Create common method for produce message in TopicMessagesTests
* [e2e] Create common method for produce message in TopicMessagesTests
* [e2e] Create common method for produce message in TopicMessagesTests
* test commit
* fix BaseTest
* upd global
* upd global
* upd global
* add local browser VM option
* fix TopicsList column header locator
* fix withStartupTimeout()
* Update bug_report.md
Added:
1. Actual result,
2. Suggestions on naming convention
3. CAPSed the system info partially and moved to top. Alternative: use the warning emoji and move outside the commented block
4. Specified few examples of additional context, that might help collecting more info n the bug.
* Update bug_report.md
replaced severity and priority suggestion.
* Update .github/ISSUE_TEMPLATE/bug_report.md
done
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
* Update bug_report.md
- Moved actual and expected result together at the top
- Changed to "Alternative scenarios"
- Changed number 4 in additional context as well
-removed duplication of "Steps to reproduce"
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
* Vite Custom Plugin code initialization , ( not building on js file )
* Fix the lazy loading functionality in vite
* add lazy loading in the Cluster page
* minor comment code cleanup
* Remove un-necessary files for configuration of the vite
* minor naming modifications
* minor code modification to encode a variable in the root
* Upgarde to Vite v4
* Fix warnings
* resolved validateDOMNesting(...) warning also remove act from PreviewModal.spec.tsx
* Revert "resolved validateDOMNesting(...) warning also remove act from PreviewModal.spec.tsx"
This reverts commit f24660918f.
Co-authored-by: davitbejanyan <dbejanyan@provectus.com>
* [e2e] Checking Topics settings to make sure retention.bytes is right according to Max size on disk in GB selected value. Created new class - SettingsPanel and inner class in SettingsPanel. Add new test to Topicstests.
* First Update. Checking Topics settings to make sure retention.bytes is right according to Max size on disk in GB selected value
* Second Update. Checking Topics settings to make sure retention.bytes is right according to Max size on disk in GB selected value
* Second Update. Checking Topics settings to make sure retention.bytes is right according to Max size on disk in GB selected value
* [e2e] Final Fix. add topicSettingsTab.waitUntilScreenReady();
(cherry picked from commit a9d7d6c515)
* [e2e] Update case "Checking the information of used Broker in a cluster"
* [e2e] Update case "Checking the information of used Broker in a cluster"
* [e2e] Update case "Checking the information of used Broker in a cluster"
* [e2e]First Fix Update case "Checking the information of used Broker in a cluster"
* [e2e]Second Fix Update case "Checking the information of used Broker in a cluster"
* [e2e]Third Fix Update case "Checking the information of used Broker in a cluster"
* [e2e]Third Fix Update case "Checking the information of used Broker in a cluster"
Co-authored-by: Vlad Senyuta <66071557+VladSenyuta@users.noreply.github.com>
(cherry picked from commit ca3916aae0)
* Checking messages filtering by Offset within Topic/Messages
* Fix test checkTimeToRetainDataCustomValueWithEditingTopic(), refactored assertions on topicCreateEditForm from "604800000" to ""
* Fix test checkTimeToRetainDataCustomValueWithEditingTopic(),added setNumberOfPartitions as mandatory field
* resolve conversations
* resolve conversations
* resolve conversations
(cherry picked from commit de7f7db269)
* [e2e] Create method with common steps inside test classes. Connectors, Schema, Brokers are done.
* [e2e] Create method with common steps inside test classes. Topics are done.
* [e2e] First Fix. Create method with common steps inside test classes.
* [e2e]TopicName in redirectToConsumerFromTopic changed.
* [e2e]TopicName in redirectToConsumerFromTopic returned.
* [e2e]Broker tests fix.
* [e2e]Topic tests fix. .setNumberOfPartitions(1) and setTimeToRetainDataInMs("604800000") added.
* [e2e]Topic tests fix. verifyVisibleElements() and verifyEnabledElements added.
* [e2e]Topic tests fix. verifyVisibleElements() and verifyEnabledElements added.
* [e2e]Fix with verifyElementsCondition()
* [e2e]Fix SmokeTests.
* [e2e]Fix2 SmokeTests.
(cherry picked from commit c13440b65d)
* [e2e]Checking 'Time to retain data (in ms)' custom value with editing Topic's settings
* resolve conversations
* resolve conversation and refactored test addingNewFilterWithinTopic() with randomAlphabetic()
* resolve conversation and refactored test checkFilterSavingWithinSavedFilters() with randomAlphabetic()
(cherry picked from commit d2d039e36c)
* Drop experimental endpoints
* [FE] Change message timestamp format (#3119)
* remove dayjs from the code base
* remove dayjs library and clean up the hook codes
* minor obsolete fixtures deletion
* minor provider code modifications
* minor provider code modifications
* minor linter code modifications
* minor date local and language code modifications
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
* removing timestamp api from the generated sources
Co-authored-by: Mgrdich <46796009+Mgrdich@users.noreply.github.com>
Co-authored-by: Mgrdich <mgotm13@gmail.com>
* initial messages pagination , modification in v2
add minor test in messages table component
Add Messages pagination
add next feature in the Advanced Filters
Messages Table add Back button navigation
remove un-necessary code from the messages table
minor code refactors to remove unnecessary codes
page parameter fix in the query of the advanced Filters
minor change in the test file to keep uniformity of the project
set default table limit for first request messages v1
* pagination fix the initial disable
* TopicForm CleanupPolicy default value clash in the edit page
* minor code import modification in topicsParamsTransformer
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
* Role based access control
* Fix build + checkstyle
* Refactoring, some bug fixes, review fixes
* Compile permission value patterns
* Make the resource a enum instead of a string
* Refactoring
* Make clusters required
* Fix formatting
* switch the switch case to a smart switch case
* Get rid of topic analysis actions
* Rename endpoints, fix an issue
* Return a flag indicating if rbac is on and a username
* Fix yaml indent in editorconfig
* Fix github & cognito role name fetching
* Fix case matching for actions
* Update readme
* Add an endpoint to determine if a user can create a resource
* Fix tests (I hope so)
* Fix tests
* Use spring configs instead of a separate file, rename endpoints
* Add "ALL" action
Get rid of unnecessary cache, save groups into spring auth
Review fixes
* Make "all" action case-insensitive
* Role based access control / FrontEnd (#2933)
* Initial modifications and mocking the For the RoleAccess
* fix the Suspense issue in the components , comment the Tests to implement later
* minor test comment
* Roles and configuration and santization of data
* initialize RoleCheck hook
* make the App test file visible + minor modification in the permission hook
* Structure the data so the Burger header toggle does not rerender the whole application
* add tests to the NavBar and the Page container , add tests
* NavBar and PageContainer bug fixes
* Roles Testing code modification
* covering Topics create button Actions, and Schema create button Actions
* minor typescript code modifications for the cluster required parameter in the rolesHelper
* minor typescript code modifications for the cluster required parameter in the rolesHelper
* minor code modification to describe the Permission tests more clearly
* Produce message Permissions with Tests Suites for Topic
* Add Schema Edit Permission with tests
* Minor role changes
* Add ActionButton Component to handle the Button with tooltip
* Add ActionButton Component to handle the Button with tooltip
* Add Action Button to every Button create Action
* ActionButton add test suites
* usePermission code modification to include regular expressions
* Abstract Actions Component for code repetition, add Configs Edit button Permission + add the tests suites to it.
* Schema Remove functionality Permission and Test Suites + creation of the ActionDropdownItem for Actions
* Topic Edit Clear and delete Topic , Permissions with test suites
* ActionsCell For Topic Message Overview for permissions with tests suites
* Connector Delete , Consumer Groups Permission + writing test suites
* Add Permissions to the Topics ActionCell
* Topic Table Permissions Tests Suites
* Headless Logic for the Permission Part
* add documentation for the headless Part of the permission + add modification of the data version 2 for efficient algorithmic lookup
* replace modify data logic and isPermitted function to have faster access to the data
* Add Permission helpers tests suites
* usePermission hook test suites
* BatchActionsBar add Permissions + minor modification in TopicTable tests suites
* Statistics and Metrics code Permission + add test suites
* Recreate Topic Permissions in the Topic page, add tests suites
* Actions for the Connector components
* Messages NavLink View Permission
* Test suites messages code modifications
* Permissions comment code modifications
* Replacing the Mock Data With the actual code
* Add ActionNavLink test suites
* BatchActionsBar code smell modifications
* maximizing the permissions tests suites
* maximizing the permissions tests suites
* maximizing the permissions tests suites
* Tooltip code refactoring and fix the positions issue
* permissions increase the tests coverage
* add user info at the navigation header and tests suites
* Add Global Schema Selector Permissions with test suites
* Roles minor code removal
* Change the Action Component form hook mixin approach to declarative props approach
* add isPermitted function for multiple Actions , adding tests suites for this particular case
* remove redundant Permissions test blocks from the components
* remove redundant Permissions test blocks from the components
* Action Buttons test suites' coverage + generalizing the code of the Actions
* add invalid Permission check in Action Components tests suites
* Modularization of Actions Components
* Modularization of Actions Components by adding DropDownAction to it.
* Reflect the BE Changes to the UI , by changing the default behavior or the testing of roles.
* Reflect the BE Changes to the UI , by changing the default behavior or the testing of roles.
* Get rid of not necessary usePermission mocks
* Modifications in the UserInfo data , to consider the UI without any login functionality
* minor code modifications in the BatchActionBar component
* change the Query key for the user info
* change the default message for the tooltip
* Fix the Create Role Access for Topics and Schemas
* ListPage Connector create permissions
* add Headless logic for Create Permission with test suites. + add react hook render-er
* Create Button ActionButton logic implementation
* Remove Code smells , by removing the duplications
* increase the test suites for isPermittedToCreate logic
* increase the test suites for isPermittedToCreate logic
* Change the UserResourceType Enum with the new value
* Apply New Resource Creation validation, for Topic, Schema, Connector
* Apply New Resource Creation validation, for Topic, Schema, Connector
* minor code refactor modifications
* minor code modification in the topics useCreate hook
* Async Validation for all the Create Pages
* caching test for optimal performance in async validation schemas
* Reverting the Front End Validation
* Reverting the Front End Validation
* Authorization API minor syntax modifications
* fix SmokeTests
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
Co-authored-by: VladSenyuta <vlad.senyuta@gmail.com>
Co-authored-by: Mgrdich <46796009+Mgrdich@users.noreply.github.com>
Co-authored-by: VladSenyuta <vlad.senyuta@gmail.com>
* SeekType fix the value during the offset and timestamp fields
* BE: thread interruption logging added to Emitters
Co-authored-by: iliax <ikuramshin@provectus.com>
* Brokers API improvements:
1. broker io rates stats added
2. active controller property set to node id
3. minor refactoring
4. FE: Add an indicator for an active broker controller
Co-authored-by: Mgrdich <mgotm13@gmail.com>
Co-authored-by: iliax <ikuramshin@provectus.com>
Co-authored-by: Hrant Abrahamyan <113341474+habrahamyanpro@users.noreply.github.com>
Co-authored-by: Mgrdich <mgotm13@gmail.com>
* UI support for MSK
* fixed test changes
* fixed pull request comments
* Use the opposite operator (!==) instead.
* fixed update topic
* Minor code modifications in the Edit Submission logic
* minor typescript code change, in the TopicFormData
* minor CustomParamField short circuit code efficiency improveral
* Topic Form Edit , sanitization of Default non-dirty fields, while sending the dynamic ones
* fix checkTopicCreatePossibility()
* fix checkTopicCreatePossibility()
Co-authored-by: Mgrdich <46796009+Mgrdich@users.noreply.github.com>
Co-authored-by: Mgrdich <mgotm13@gmail.com>
Co-authored-by: VladSenyuta <vlad.senyuta@gmail.com>
* Add SuspenseQueryComponent for the ErrorBoundary delegation , implement this component in all those pages where the issue was happening
* Add Comment to the SuspenseQueryComponent
* Create the Error page
* Error page styling modifications
* Error Page redirections
* Redux Request handle error case and Navigation
* SuspenseQueryComponent test suites
* minor ErrorPage component modifications
* Add error page test suites
* SuspenseQueryComponent Error handling modification
* UI now showing broker list when DISABLELOGDIRSCOLLECTION=true
* specs fix
* code review fixes
* fix the diskUsage check in the empty array case
* fix the diskUsage check in the empty array case minor segment size fix
Co-authored-by: Kamila Alekbaeva <kalekbaeva@provectus.com>
Co-authored-by: Ilya Kuramshin <iliax@proton.me>
Co-authored-by: Mgrdich <mgotm13@gmail.com>
* chore: changed `dateFormat` for Timestamp value
- in Topic/Messages
- closes#2858
* consider case-sensitivity in `dateFormat`
:)
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
* ISSUE-3024: kui not working when controller not found
1. ReactiveAdminClient::getClusterVersion now takes into account that controller can not be visible
2. Uniq clientId generation added for consumers and adminClients
3. ReactiveAdminClient::toMonoWithExceptionFilter implementation simplified
* uniq adminclient clientId generation
Co-authored-by: iliax <ikuramshin@provectus.com>
* Polling throttling:
1. PollingThrottler class for per-cluster throttle managing
2. UI-publishing throttle for TailingEmitter
3. Elastic scheduler assigned for places where Serde interfaces are used
* int cast fix
* compilation fix
* test threshold fix
Co-authored-by: iliax <ikuramshin@provectus.com>
Co-authored-by: Roman Zabaluev <rzabaluev@provectus.com>
ReactiveAdminClient::listOffsetsUnsafe now skipping non-initialized partitions. This prevents UnknownTopicOrPartitionException to be leaked to high-level logic levels (preventing TopicService::loadTopicAfterCreation to do retries)
* "Select filter" button is active without selecting any saved filter within Topic/Messages/Saved filters (#2870)
* Add minor tests
* Fix prettier
* Fix unit test
* Fix unit test
Hi, thanks for raising the issue(-s), all contributions really matter!
Please, note that we'll close the issue without further explanation if you don't follow
this template and don't provide the information requested within this template.
- type:checkboxes
id:terms
attributes:
label:Issue submitter TODO list
description:By you checking these checkboxes we can be sure you've done the essential things.
options:
- label:I've searched for an already existing issues [here](https://github.com/provectus/kafka-ui/issues)
required:true
- label:I'm running a supported version of the application which is listed [here](https://github.com/provectus/kafka-ui/blob/master/SECURITY.md) and the feature is not present there
required:true
- type:textarea
attributes:
label:Is your proposal related to a problem?
description:|
Provide a clear and concise description of what the problem is.
For example, "I'm always frustrated when..."
validations:
required:false
- type:textarea
attributes:
label:Describe the feature you're interested in
description:|
Provide a clear and concise description of what you want to happen.
validations:
required:true
- type:textarea
attributes:
label:Describe alternatives you've considered
description:|
Let us know about other solutions you've tried or researched.
validations:
required:false
- type:input
attributes:
label:Version you're running
description:|
Please provide the app version you're currently running:
1. App version (commit hash in the top left corner of the UI)
validations:
required:true
- type:textarea
attributes:
label:Additional context
description:|
Is there anything else you can add about the proposal?
You might want to link to related issues here, if you haven't already.
This guide is an exact copy of the same documented located [in our official docs](https://docs.kafka-ui.provectus.io/development/contributing). If there are any differences between the documents, the one located in our official docs should prevail.
This guide aims to walk you through the process of working on issues and Pull Requests (PRs).
Bear in mind that you will not be able to complete some steps on your own if you do not have a “write” permission. Feel free to reach out to the maintainers to help you unlock these activities.
@ -20,7 +22,7 @@ You also need to consider labels. You can sort the issues by scope labels, such
## Grabbing the issue
There is a bunch of criteria that make an issue feasible for development. <br/>
The implementation of any features and/or their enhancements should be reasonable, must be backed by justified requirements (demanded by the community, [roadmap](documentation/project/ROADMAP.md) plans, etc.). The final decision is left for the maintainers' discretion.
The implementation of any features and/or their enhancements should be reasonable, must be backed by justified requirements (demanded by the community, [roadmap](https://docs.kafka-ui.provectus.io/project/roadmap) plans, etc.). The final decision is left for the maintainers' discretion.
All bugs should be confirmed as such (i.e. the behavior is unintended).
@ -39,7 +41,7 @@ To keep the status of the issue clear to everyone, please keep the card's status
## Setting up a local development environment
Please refer to [this guide](documentation/project/contributing/README.md).
Please refer to [this guide](https://docs.kafka-ui.provectus.io/development/contributing).
<em>UI for Apache Kafka is a free tool built and supported by the open-source community. Curated by Provectus, it will remain free and open-source, without any paid features or subscription plans to be added in the future.
Looking for the help of Kafka experts? Provectus can help you design, build, deploy, and manage Apache Kafka clusters and streaming applications. Discover [Professional Services for Apache Kafka](https://provectus.com/professional-services-apache-kafka/), to unlock the full potential of Kafka in your enterprise! </em>
#### UI for Apache Kafka is a free, open-source web UI to monitor and manage Apache Kafka clusters.
UI for Apache Kafka 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.
### DISCLAIMER
<em>UI for Apache Kafka is a free tool built and supported by the open-source community. Curated by Provectus, it will remain free and open-source, without any paid features or subscription plans to be added in the future.
Looking for the help of Kafka experts? Provectus can help you design, build, deploy, and manage Apache Kafka clusters and streaming applications. Discover [Professional Services for Apache Kafka](https://provectus.com/professional-services-apache-kafka/), to unlock the full potential of Kafka in your enterprise! </em>
Set up UI for Apache Kafka with just a couple of easy commands to visualize your Kafka data in a comprehensible way. You can run the tool locally or in
the cloud.
@ -29,7 +43,10 @@ the cloud.
* **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 Authentification** — secure your installation with optional Github/Gitlab/Google OAuth 2.0
* **Configurable Authentification** — [secure](https://docs.kafka-ui.provectus.io/configuration/authentication) your installation with optional Github/Gitlab/Google OAuth 2.0
* **Custom serialization/deserialization plugins** - [use](https://docs.kafka-ui.provectus.io/configuration/serialization-serde) a ready-to-go serde for your data like AWS Glue or Smile, or code your own!
* **Role based access control** - [manage permissions](https://docs.kafka-ui.provectus.io/configuration/rbac-role-based-access-control) to access the UI with granular precision
* **Data masking** - [obfuscate](https://docs.kafka-ui.provectus.io/configuration/data-masking) sensitive data in topic messages
# The Interface
UI for Apache Kafka wraps major functions of Apache Kafka with an intuitive user interface.
@ -57,151 +74,68 @@ There are 3 supported types of schemas: Avro®, JSON Schema, and Protobuf schema
- [Connection to a secure broker](documentation/guides/SECURE_BROKER.md)
### Configuration File
Example of how to configure clusters in the [application-local.yml](https://github.com/provectus/kafka-ui/blob/master/kafka-ui-api/src/main/resources/application-local.yml) configuration file:
* `schemaNameTemplate`: how keys are saved to schemaRegistry
* `metrics.port`: open JMX port of a broker
* `metrics.type`: Type of metrics, either JMX or PROMETHEUS. Defaulted to JMX.
* `readOnly`: enable read only mode
Configure as many clusters as you need by adding their configs below separated with `-`.
## Running a Docker Image
The official Docker image for UI for Apache Kafka is hosted here: [hub.docker.com/r/provectuslabs/kafka-ui](https://hub.docker.com/r/provectuslabs/kafka-ui).
Launch Docker container in the background:
```sh
docker run -p 8080:8080 \
-e KAFKA_CLUSTERS_0_NAME=local \
-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092 \
-d provectuslabs/kafka-ui:latest
## Quick start (Demo run)
```
Then access the web UI at [http://localhost:8080](http://localhost:8080).
Further configuration with environment variables - [see environment variables](#env_variables)
docker run -it -p 8080:8080 -e DYNAMIC_CONFIG_ENABLED=true provectuslabs/kafka-ui
```
### Docker Compose
Then access the web UI at [http://localhost:8080](http://localhost:8080)
If you prefer to use `docker-compose` please refer to the [documentation](docker-compose.md).
The command is sufficient to try things out. When you're done trying things out, you can proceed with a [persistent installation](https://docs.kafka-ui.provectus.io/quick-start/persistent-start)
### Helm chart
Helm chart could be found under [charts/kafka-ui](https://github.com/provectus/kafka-ui/tree/master/charts/kafka-ui) directory
Alternatively, each variable of the .yml file can be set with an environment variable.
For example, if you want to use an environment variable to set the `name` parameter, you can write it like this: `KAFKA_CLUSTERS_2_NAME`
All of the environment variables/config properties could be found [here](https://docs.kafka-ui.provectus.io/configuration/misc-configuration-properties).
|`SERVER_PORT` |Port for the embedded server. Default: `8080`
|`KAFKA_ADMIN-CLIENT-TIMEOUT` | Kafka API timeout in ms. Default: `30000`
|`KAFKA_CLUSTERS_0_NAME` | Cluster name
|`KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS` |Address where to connect
|`KAFKA_CLUSTERS_0_KSQLDBSERVER` | KSQL DB server address
|`KAFKA_CLUSTERS_0_KSQLDBSERVERAUTH_USERNAME` | KSQL DB server's basic authentication username
|`KAFKA_CLUSTERS_0_KSQLDBSERVERAUTH_PASSWORD` | KSQL DB server's basic authentication password
|`KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL` |Security protocol to connect to the brokers. For SSL connection use "SSL", for plaintext connection don't set this environment variable
|`KAFKA_CLUSTERS_0_SCHEMAREGISTRYSSL_KEYSTORELOCATION` |Path to the JKS keystore to communicate to SchemaRegistry
|`KAFKA_CLUSTERS_0_SCHEMAREGISTRYSSL_KEYSTOREPASSWORD` |Password of the JKS keystore for SchemaRegistry
|`KAFKA_CLUSTERS_0_SCHEMAREGISTRYSSL_TRUSTSTORELOCATION` |Path to the JKS truststore to communicate to SchemaRegistry
|`KAFKA_CLUSTERS_0_SCHEMAREGISTRYSSL_TRUSTSTOREPASSWORD` |Password of the JKS truststore for SchemaRegistry
|`KAFKA_CLUSTERS_0_SCHEMANAMETEMPLATE` |How keys are saved to schemaRegistry
|`KAFKA_CLUSTERS_0_METRICS_PORT` |Open metrics port of a broker
|`KAFKA_CLUSTERS_0_METRICS_TYPE` |Type of metrics retriever to use. Valid values are JMX (default) or PROMETHEUS. If Prometheus, then metrics are read from prometheus-jmx-exporter instead of jmx
| `existingConfigMap` | Name of the existing ConfigMap with Kafka-UI environment variables | `nil` |
| `existingSecret` | Name of the existing Secret with Kafka-UI environment variables | `nil` |
| `envs.secret` | Set of the sensitive environment variables to pass to Kafka-UI | `{}` |
| `envs.config` | Set of the environment variables to pass to Kafka-UI | `{}` |
| `yamlApplicationConfigConfigMap` | Map with name and keyName keys, name refers to the existing ConfigMap, keyName refers to the ConfigMap key with Kafka-UI config in Yaml format | `{}` |
| `yamlApplicationConfig` | Kafka-UI config in Yaml format | `{}` |
7. [e2e-tests.yaml](./e2e-tests.yaml) - Configuration with different connectors (github-source, s3, sink-activities, source-activities) and Ksql functionality.
8. [kafka-ui-jmx-secured.yml](./kafka-ui-jmx-secured.yml) - Kafka’s JMX with SSL and authentication.
9. [kafka-ui-reverse-proxy.yaml](./kafka-ui-reverse-proxy.yaml) - An example for using the app behind a proxy (like nginx).
9. [kafka-ui-reverse-proxy.yaml](./nginx-proxy.yaml) - An example for using the app behind a proxy (like nginx).
10. [kafka-ui-sasl.yaml](./kafka-ui-sasl.yaml) - SASL auth for Kafka.
11. [kafka-ui-traefik-proxy.yaml](./kafka-ui-traefik-proxy.yaml) - Traefik specific proxy configuration.
11. [kafka-ui-traefik-proxy.yaml](./traefik-proxy.yaml) - Traefik specific proxy configuration.
12. [oauth-cognito.yaml](./oauth-cognito.yaml) - OAuth2 with Cognito
13. [kafka-ui-with-jmx-exporter.yaml](./kafka-ui-with-jmx-exporter.yaml) - A configuration with 2 kafka clusters with enabled prometheus jmx exporters instead of jmx.
14. [kafka-with-zookeeper.yaml](./kafka-with-zookeeper.yaml) - An example for using kafka with zookeeper
command:'bash -c ''if [ ! -f /tmp/update_run.sh ]; then echo "ERROR: Did you forget the update_run.sh file that came with this docker-compose.yml file?" && exit 1 ; else /tmp/update_run.sh && /etc/confluent/docker/run ; fi'''
command:"bash -c 'if [ ! -f /tmp/update_run.sh ]; then echo \"ERROR: Did you forget the update_run.sh file that came with this docker-compose.yml file?\" && exit 1 ; else /tmp/update_run.sh && /etc/confluent/docker/run ; fi'"
command:"bash -c 'if [ ! -f /tmp/update_run.sh ]; then echo \"ERROR: Did you forget the update_run.sh file that came with this docker-compose.yml file?\" && exit 1 ; else /tmp/update_run.sh && /etc/confluent/docker/run ; fi'"
command:"bash -c 'if [ ! -f /tmp/update_run.sh ]; then echo \"ERROR: Did you forget the update_run.sh file that came with this docker-compose.yml file?\" && exit 1 ; else /tmp/update_run.sh && /etc/confluent/docker/run ; fi'"
DYNAMIC_CONFIG_ENABLED:true# not necessary for sasl auth, added for tests
kafka:
image:confluentinc/cp-kafka:7.2.1
@ -48,4 +49,4 @@ services:
volumes:
- ./scripts/update_run.sh:/tmp/update_run.sh
- ./jaas:/etc/kafka/jaas
command:"bash -c 'if [ ! -f /tmp/update_run.sh ]; then echo \"ERROR: Did you forget the update_run.sh file that came with this docker-compose.yml file?\" && exit 1 ; else /tmp/update_run.sh && /etc/confluent/docker/run ; fi'"
command:"bash -c 'if [ ! -f /tmp/update_run.sh ]; then echo \"ERROR: Did you forget the update_run.sh file that came with this docker-compose.yml file?\" && exit 1 ; else /tmp/update_run.sh && /etc/confluent/docker/run ; fi'"
command:"bash -c 'if [ ! -f /tmp/update_run.sh ]; then echo \"ERROR: Did you forget the update_run.sh file that came with this docker-compose.yml file?\" && exit 1 ; else /tmp/update_run.sh && /etc/confluent/docker/run ; fi'"