How to delete a user in Apache Kafka? - apache-kafka

I want to delete a Kafka user.
Is this something that can be achieved?
Honestly, im not even sure im actually understanding the concept of Kafka users.
I started by reading this, but im not being able to easily extract any conclusion.
Thank you

Kafka user per say it's just the sum of its permissions, there is no "real" kafka user object in kafka.
Let's say that the "kafka" saves just the definitions of authorisations the user/principle possess.
You can remove the principle permissions, with an adequate command, for example kafka-acls.sh with the --remove parameter.

You can remove SCRAM password and/or quota config from kafka with a command like:
kafka-configs.sh --bootstrap-server 127.0.0.1:9092 --alter --delete-config "SCRAM-SHA-256" --entity-type users --entity-name USERNAME
And describe existing user configs with:
kafka-configs.sh --bootstrap-server 127.0.0.1:9092 --describe --entity-type users

Related

Apache Kafka adding username and password SCRAM-SHA

I am currently using Kafka 2.6.0
I am trying to add SCRAM credential to zookeeper by following steps here:
https://docs.confluent.io/platform/current/kafka/authentication_sasl/authentication_sasl_scram.html
However, the command
bin/kafka-configs --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=alice-secret],SCRAM-SHA-512=[password=alice-secret]'
--entity-type users --entity-name Alice
returns below warning and successfully adds the credential for the user Alice
Warning: --zookeeper is deprecated and will be removed in a future version of Kafka.
Use --bootstrap-server instead to specify a broker to connect to.
Completed updating config for entity: user-principal 'Alice'
I have tried using bootstrap-server but getting this warning and does not add credential.
bin/kafka-configs --bootstrap-server localhost:9094 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=alice-secret],SCRAM-SHA-512=[password=bob-secret]'
--entity-type users --entity-name Bob
Only quota configs can be added for 'users' using --bootstrap-server. Unexpected config names: Set(SCRAM-SHA-512)
The Kafka Broker and Zookeeper are up and running and I can currently produce/consume messages successfully with Alice's credential.
Is there a way to add SCRAM credentials in zookeeper using bootstrap-server?

How to secure kafka Topic with username and password from CLI/command line?

I have installed Docker on my Windows 10 and also installed Kafka. I have created a "test" Topic inside a Kafka cluster. Now I want to secure the Topic with a simple username and password. I am super new to Kafka, any help would really be appreciated.
To run Kafka commands, I am using windows "Power Shell".
I have tried running a few commands on the command line
To create Topics:-
kafka-topics --create --topic test --partitions 1 --replication-factor 1 --if-not-exists --zookeeper zookeeper:2181
To secure Topic I used command:
kafka-acls --topic test --producer --authorizer-properties --zookeeper zookeeper:2181 --add --allow-principal User:alice
Unfortunately, it says "bash: afka-acl: command not found"
Do I need to include anything in the Kafka configuration file? or Is it possible to just run commands from power shell and secure Topic?
Securing with username and password is the same as ACL or different?
Kafka support authentication of connections to brokers from clients (producers and consumers) using
SSL
SASL (Kerberos) and SASL/PLAIN
This need configuration changes in for both broker and clients.
What you are asking for seems like SASL plain. However as mentioned above this cannot be done from CLI and required configuration changes. If you follow the steps in the documentation link, it is pretty straightforward.
ACL is authorization which defines which user has access to what topics. See this link

get current config in kafka

I was trying to get the config for one of the kafka clusters we have. After doing a config change through puppet, I want to know if kafka has reloaded the config, or if we need to restart the service for that.
I have tried with ./kafka-configs.sh --describe --zookeeper my-zookeeper:2181 --entity-type brokers but I only have empty output.
I have also tried to find for the config browsing inside the zookeepers but i have found nothing.
Is there any way to retrieve which config is being used?
Here's full working command to list all configs for the broker with id=1:
./bin/kafka-configs.sh --bootstrap-server <broker-host>:9092 --entity-type
brokers --entity-name 1 --all --describe
as suggested #LijuJohn i found the config in the server.log file. Thanks a lot!!
Since Kafka 2.5.0 (see issue here), you can now specify the --all flag to list all configs (not just the dynamic ones) when using ./kafka-configs.sh
Have you tried with parameter --entity-name 0 where 0 is the id of the broker?
This is required at least for my cluster.
On CentOS7, kafka version:3.3.2
Should be able to find all the configurations via:
bin/kafka-configs.sh --describe --bootstrap-server <advertised.listeners>:9092 --entity-type brokers --entity-name <broker-id> --all
#example:
bin/kafka-configs.sh --describe --bootstrap-server localhost:9092 --entity-type brokers --entity-name 0 --all
Note:
Both <advertised.listeners> and could be found in config/server.properties

Not able to delete Topics from kafka

even after enabling delete.topic.enable=true in server.config
deletion of topics not working . i am getting following error on recreating the topic again
Topic 'test' already exists.
[2017-05-23 06:47:05,757] ERROR
org.apache.kafka.common.errors.TopicExistsException: Topic 'test' already exists.
You can not delete a topic when consuming it. Use bin/kafka-consumer-groups.sh or simple ps -aux|grep Consumer to find any possible consumers which block the operation.
remove meta data in zookeeper
./bin/zookeeper-shell.sh localhost:2181
rmr /brokers/topics/mytopic
rmr /admin/delete_topics/mytopic
If you use the latest Kafka (v. ~0.10.) then after you enabled the delete.topic.enable=true option you have to:
Restart Kafka
Delete topic:
kafka-topics.sh --zookeeper localhost:2181 --topic mytopic --delete
Check that it was marked for deletion:
kafka-topics.sh --zookeeper localhost:2181 --list
mytopic - marked for deletion
And wait a bit.
And if you use some old version of Kafka, then try to delete the topic from a zookeeper-shell.
If the zookeeper is a standalone instance (not on the localhost), mark for deletion of topics won't delete it properly.
One suggestion would be to use Zookeeper Exhibitor & delete it from admin & brokers.
Exhibitor give a UI interface to visualise how the topics & kafka brokers are arranged.

Delete topic in Kafka 0.8.1.1

I need to delete the topic test in Apache Kafka 0.8.1.1.
As expressed in the documentation here, I have executed:
bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test
However, this results in the following message:
Command must include exactly one action: --list, --describe, --create or --alter
How can I delete this topic?
Deleting topic isn't always working in 0.8.1.1
Deletion should be working in the next release, 0.8.2
kafka-topics.sh --delete --zookeeper localhost:2181 --topic your_topic_name
Topic your_topic_name is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
You may also pass in a bootstrap server instead of zookeeper:
kafka-topics.sh --bootstrap-server kafka:9092 --delete --topic your_topic_name
Is it possible to delete a topic?
Jira KAFKA-1397
It seems that the deletion command was not officially documented in Kafka 0.8.1.x because of a known bug (https://issues.apache.org/jira/browse/KAFKA-1397).
Nevertheless, the command was still shipped in the code and can be executed as:
bin/kafka-run-class.sh kafka.admin.DeleteTopicCommand --zookeeper localhost:2181 --topic test
In the meantime, the bug got fixed and the deletion command is now officially available from Kafka 0.8.2.0 as:
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test
Add below line in ${kafka_home}/config/server.properties
delete.topic.enable=true
Restart the kafka server with new config:
${kafka_home}/bin/kafka-server-start.sh ~/kafka/config/server.properties
Delete the topics you wish to:
${kafka_home}/bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic daemon12
Andrea is correct. we can do it using command line.
And we still can program it, by
ZkClient zkClient = new ZkClient("localhost:2181", 10000);
zkClient.deleteRecursive(ZkUtils.getTopicPath("test2"));
Actually I do not recommend you delete topic on Kafka 0.8.1.1. I can delete this topic by this method, but if you check log for zookeeper, deletion mess it up.
Steps to Delete 1 or more Topics in Kafka
#To delete topics in kafka the delete option needs to be enabled in Kafka server.
1. Go to {kafka_home}/config/server.properties
2. Uncomment delete.topic.enable=true
#Delete one Topic in Kafka enter the following command
kafka-topics.sh --delete --zookeeper localhost:2181 --topic <your_topic_name>
#To Delete more than one topic from kafka
(good for testing purposes, where i created multiple topics & had to delete them for different scenarios)
Stop the Kafka Server and Zookeeper
go to server folder where the logs are stored (defined in their config files) and delete the kafkalogs and zookeeper folder manually
Restart the zookeeper and kafka server and try to list topics,
bin/kafka-topics.sh --list --zookeeper localhost:2181
if no topics are listed then the all topics have been deleted successfully.If topics are listed, then the delete was not successful. Try the above steps again or restart your computer.
You can delete a specific kafka topic (example: test) from zookeeper shell command (zookeeper-shell.sh). Use the below command to delete the topic
rmr {path of the topic}
example:
rmr /brokers/topics/test
This steps will delete all topics and data
Stop Kafka-server and Zookeeper-server
Remove the data directories of both services, by default on windows they are
C:/tmp/kafka-logs and C:/tmp/zookeeper.
then start Zookeeper-server and Kafka-server
The command:
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test
unfortunately only marks topic for deletion.
Deletion does not happen.
That makes troubles, while testing any scripts, which prepares Kafka configuration.
Connected threads:
Purge Kafka Queue
Is there a way to delete all the data from a topic or delete the topic before every run?
As mentioned in doc here
Topic deletion option is disabled by default. To enable it set the server config
delete.topic.enable=true
Kafka does not currently support reducing the number of partitions for a topic or changing the replication factor.
Make sure delete.topic.enable=true
Adding to above answers one has to delete the meta data associated with that topic in zookeeper consumer offset path.
bin/zookeeper-shell.sh zookeeperhost:port
rmr /consumers/<sample-consumer-1>/offsets/<deleted-topic>
Otherwise the lag will be negative in kafka-monitoring tools based on zookeeper.
First, you run this command to delete your topic:
$ bin/kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic <topic_name>
List active topics to check delete completely:
$ bin/kafka-topics.sh --list --bootstrap-server localhost:9092
If you have issues deleting the topics, try to delete the topic using:
$KAFKA_HOME/bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic your_topic_name
command. Then in order to verify the deletion process, go to the kafka logs directory which normally is placed under /tmp/kafka-logs/, then delete the your_topic_name file via rm -rf your_topic_name command.
Remember to monitor the whole process via a kafka management tool like Kafka Tool.
The mentioned process above will remove the topics without kafka server restart.
There is actually a solution without touching those bin/kafka-*.sh: If you have installed kafdrop, then simply do:
url -XPOST http://your-kafdrop-domain/topic/THE-TOPIC-YOU-WANT-TO-DELETE/delete
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic <topic-name>
Step 1: Make sure you are connected to zookeeper and Kafka running
Step 2: To delele the Kafka topic run kafka-topics script, add the port and --topic with name of your topic and --delete it just delete the topic with success.
# Delete the kafka topic
# it will delete the kafka topic
bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic name_of_topic --delete
This worked for me:
kafka-topics --delete --bootstrap-server localhost:9092 --topic user-commands
I am using Confluent CLI and run this on the directory I installed it.
Recent Kafka versions are about to remove the Zookeeper dependency. Therefore, you should instead reference the brokers (through --boostrap-server):
kafka-topics \
--bootstrap-server localhost:9092,localhost:9093,localhost:9094 \
--delete \
--topic topic_for_deletion
for confluent cloud use -
$ confluent kafka topic delete my_topic