All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.kafka.clients.admin.Admin Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.kafka.clients.admin;

import java.time.Duration;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.apache.kafka.clients.consumer.OffsetAndMetadata;
import org.apache.kafka.common.ElectionType;
import org.apache.kafka.common.Metric;
import org.apache.kafka.common.MetricName;
import org.apache.kafka.common.TopicPartition;
import org.apache.kafka.common.TopicPartitionReplica;
import org.apache.kafka.common.acl.AclBinding;
import org.apache.kafka.common.acl.AclBindingFilter;
import org.apache.kafka.common.annotation.InterfaceStability;
import org.apache.kafka.common.config.ConfigResource;
import org.apache.kafka.common.quota.ClientQuotaAlteration;
import org.apache.kafka.common.quota.ClientQuotaFilter;
import org.apache.kafka.common.requests.LeaveGroupResponse;

/**
 * The administrative client for Kafka, which supports managing and inspecting topics, brokers, configurations and ACLs.
 * 

* The minimum broker version required is 0.10.0.0. Methods with stricter requirements will specify the minimum broker * version required. *

* This client was introduced in 0.11.0.0 and the API is still evolving. We will try to evolve the API in a compatible * manner, but we reserve the right to make breaking changes in minor releases, if necessary. We will update the * {@code InterfaceStability} annotation and this notice once the API is considered stable. */ @InterfaceStability.Evolving public interface Admin extends AutoCloseable { /** * Create a new Admin with the given configuration. * * @param props The configuration. * @return The new KafkaAdminClient. */ static Admin create(Properties props) { return KafkaAdminClient.createInternal(new AdminClientConfig(props, true), null); } /** * Create a new Admin with the given configuration. * * @param conf The configuration. * @return The new KafkaAdminClient. */ static Admin create(Map conf) { return KafkaAdminClient.createInternal(new AdminClientConfig(conf, true), null); } /** * Close the Admin and release all associated resources. *

* See {@link #close(long, TimeUnit)} */ @Override default void close() { close(Long.MAX_VALUE, TimeUnit.MILLISECONDS); } /** * Close the Admin and release all associated resources. *

* The close operation has a grace period during which current operations will be allowed to * complete, specified by the given duration and time unit. * New operations will not be accepted during the grace period. Once the grace period is over, * all operations that have not yet been completed will be aborted with a {@link org.apache.kafka.common.errors.TimeoutException}. * * @param duration The duration to use for the wait time. * @param unit The time unit to use for the wait time. * @deprecated Since 2.2. Use {@link #close(Duration)} or {@link #close()}. */ @Deprecated default void close(long duration, TimeUnit unit) { close(Duration.ofMillis(unit.toMillis(duration))); } /** * Close the Admin client and release all associated resources. *

* The close operation has a grace period during which current operations will be allowed to * complete, specified by the given duration. * New operations will not be accepted during the grace period. Once the grace period is over, * all operations that have not yet been completed will be aborted with a {@link org.apache.kafka.common.errors.TimeoutException}. * * @param timeout The time to use for the wait time. */ void close(Duration timeout); /** * Create a batch of new topics with the default options. *

* This is a convenience method for {@link #createTopics(Collection, CreateTopicsOptions)} with default options. * See the overload for more details. *

* This operation is supported by brokers with version 0.10.1.0 or higher. * * @param newTopics The new topics to create. * @return The CreateTopicsResult. */ default CreateTopicsResult createTopics(Collection newTopics) { return createTopics(newTopics, new CreateTopicsOptions()); } /** * Create a batch of new topics. *

* This operation is not transactional so it may succeed for some topics while fail for others. *

* It may take several seconds after {@link CreateTopicsResult} returns * success for all the brokers to become aware that the topics have been created. * During this time, {@link #listTopics()} and {@link #describeTopics(Collection)} * may not return information about the new topics. *

* This operation is supported by brokers with version 0.10.1.0 or higher. The validateOnly option is supported * from version 0.10.2.0. * * @param newTopics The new topics to create. * @param options The options to use when creating the new topics. * @return The CreateTopicsResult. */ CreateTopicsResult createTopics(Collection newTopics, CreateTopicsOptions options); /** * This is a convenience method for {@link #deleteTopics(Collection, DeleteTopicsOptions)} * with default options. See the overload for more details. *

* This operation is supported by brokers with version 0.10.1.0 or higher. * * @param topics The topic names to delete. * @return The DeleteTopicsResult. */ default DeleteTopicsResult deleteTopics(Collection topics) { return deleteTopics(topics, new DeleteTopicsOptions()); } /** * Delete a batch of topics. *

* This operation is not transactional so it may succeed for some topics while fail for others. *

* It may take several seconds after the {@link DeleteTopicsResult} returns * success for all the brokers to become aware that the topics are gone. * During this time, {@link #listTopics()} and {@link #describeTopics(Collection)} * may continue to return information about the deleted topics. *

* If delete.topic.enable is false on the brokers, deleteTopics will mark * the topics for deletion, but not actually delete them. The futures will * return successfully in this case. *

* This operation is supported by brokers with version 0.10.1.0 or higher. * * @param topics The topic names to delete. * @param options The options to use when deleting the topics. * @return The DeleteTopicsResult. */ DeleteTopicsResult deleteTopics(Collection topics, DeleteTopicsOptions options); /** * List the topics available in the cluster with the default options. *

* This is a convenience method for {@link #listTopics(ListTopicsOptions)} with default options. * See the overload for more details. * * @return The ListTopicsResult. */ default ListTopicsResult listTopics() { return listTopics(new ListTopicsOptions()); } /** * List the topics available in the cluster. * * @param options The options to use when listing the topics. * @return The ListTopicsResult. */ ListTopicsResult listTopics(ListTopicsOptions options); /** * Describe some topics in the cluster, with the default options. *

* This is a convenience method for {@link #describeTopics(Collection, DescribeTopicsOptions)} with * default options. See the overload for more details. * * @param topicNames The names of the topics to describe. * @return The DescribeTopicsResult. */ default DescribeTopicsResult describeTopics(Collection topicNames) { return describeTopics(topicNames, new DescribeTopicsOptions()); } /** * Describe some topics in the cluster. * * @param topicNames The names of the topics to describe. * @param options The options to use when describing the topic. * @return The DescribeTopicsResult. */ DescribeTopicsResult describeTopics(Collection topicNames, DescribeTopicsOptions options); /** * Get information about the nodes in the cluster, using the default options. *

* This is a convenience method for {@link #describeCluster(DescribeClusterOptions)} with default options. * See the overload for more details. * * @return The DescribeClusterResult. */ default DescribeClusterResult describeCluster() { return describeCluster(new DescribeClusterOptions()); } /** * Get information about the nodes in the cluster. * * @param options The options to use when getting information about the cluster. * @return The DescribeClusterResult. */ DescribeClusterResult describeCluster(DescribeClusterOptions options); /** * This is a convenience method for {@link #describeAcls(AclBindingFilter, DescribeAclsOptions)} with * default options. See the overload for more details. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param filter The filter to use. * @return The DeleteAclsResult. */ default DescribeAclsResult describeAcls(AclBindingFilter filter) { return describeAcls(filter, new DescribeAclsOptions()); } /** * Lists access control lists (ACLs) according to the supplied filter. *

* Note: it may take some time for changes made by {@code createAcls} or {@code deleteAcls} to be reflected * in the output of {@code describeAcls}. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param filter The filter to use. * @param options The options to use when listing the ACLs. * @return The DeleteAclsResult. */ DescribeAclsResult describeAcls(AclBindingFilter filter, DescribeAclsOptions options); /** * This is a convenience method for {@link #createAcls(Collection, CreateAclsOptions)} with * default options. See the overload for more details. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param acls The ACLs to create * @return The CreateAclsResult. */ default CreateAclsResult createAcls(Collection acls) { return createAcls(acls, new CreateAclsOptions()); } /** * Creates access control lists (ACLs) which are bound to specific resources. *

* This operation is not transactional so it may succeed for some ACLs while fail for others. *

* If you attempt to add an ACL that duplicates an existing ACL, no error will be raised, but * no changes will be made. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param acls The ACLs to create * @param options The options to use when creating the ACLs. * @return The CreateAclsResult. */ CreateAclsResult createAcls(Collection acls, CreateAclsOptions options); /** * This is a convenience method for {@link #deleteAcls(Collection, DeleteAclsOptions)} with default options. * See the overload for more details. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param filters The filters to use. * @return The DeleteAclsResult. */ default DeleteAclsResult deleteAcls(Collection filters) { return deleteAcls(filters, new DeleteAclsOptions()); } /** * Deletes access control lists (ACLs) according to the supplied filters. *

* This operation is not transactional so it may succeed for some ACLs while fail for others. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param filters The filters to use. * @param options The options to use when deleting the ACLs. * @return The DeleteAclsResult. */ DeleteAclsResult deleteAcls(Collection filters, DeleteAclsOptions options); /** * Get the configuration for the specified resources with the default options. *

* This is a convenience method for {@link #describeConfigs(Collection, DescribeConfigsOptions)} with default options. * See the overload for more details. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param resources The resources (topic and broker resource types are currently supported) * @return The DescribeConfigsResult */ default DescribeConfigsResult describeConfigs(Collection resources) { return describeConfigs(resources, new DescribeConfigsOptions()); } /** * Get the configuration for the specified resources. *

* The returned configuration includes default values and the isDefault() method can be used to distinguish them * from user supplied values. *

* The value of config entries where isSensitive() is true is always {@code null} so that sensitive information * is not disclosed. *

* Config entries where isReadOnly() is true cannot be updated. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param resources The resources (topic and broker resource types are currently supported) * @param options The options to use when describing configs * @return The DescribeConfigsResult */ DescribeConfigsResult describeConfigs(Collection resources, DescribeConfigsOptions options); /** * Update the configuration for the specified resources with the default options. *

* This is a convenience method for {@link #alterConfigs(Map, AlterConfigsOptions)} with default options. * See the overload for more details. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param configs The resources with their configs (topic is the only resource type with configs that can * be updated currently) * @return The AlterConfigsResult * @deprecated Since 2.3. Use {@link #incrementalAlterConfigs(Map)}. */ @Deprecated default AlterConfigsResult alterConfigs(Map configs) { return alterConfigs(configs, new AlterConfigsOptions()); } /** * Update the configuration for the specified resources with the default options. *

* Updates are not transactional so they may succeed for some resources while fail for others. The configs for * a particular resource are updated atomically. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param configs The resources with their configs (topic is the only resource type with configs that can * be updated currently) * @param options The options to use when describing configs * @return The AlterConfigsResult * @deprecated Since 2.3. Use {@link #incrementalAlterConfigs(Map, AlterConfigsOptions)}. */ @Deprecated AlterConfigsResult alterConfigs(Map configs, AlterConfigsOptions options); /** * Incrementally updates the configuration for the specified resources with default options. *

* This is a convenience method for {@link #incrementalAlterConfigs(Map, AlterConfigsOptions)} with default options. * See the overload for more details. *

* This operation is supported by brokers with version 2.3.0 or higher. * * @param configs The resources with their configs * @return The AlterConfigsResult */ default AlterConfigsResult incrementalAlterConfigs(Map> configs) { return incrementalAlterConfigs(configs, new AlterConfigsOptions()); } /** * Incrementally update the configuration for the specified resources. *

* Updates are not transactional so they may succeed for some resources while fail for others. The configs for * a particular resource are updated atomically. *

* The following exceptions can be anticipated when calling {@code get()} on the futures obtained from * the returned {@link AlterConfigsResult}: *

    *
  • {@link org.apache.kafka.common.errors.ClusterAuthorizationException} * if the authenticated user didn't have alter access to the cluster.
  • *
  • {@link org.apache.kafka.common.errors.TopicAuthorizationException} * if the authenticated user didn't have alter access to the Topic.
  • *
  • {@link org.apache.kafka.common.errors.InvalidRequestException} * if the request details are invalid. e.g., a configuration key was specified more than once for a resource
  • *
*

* This operation is supported by brokers with version 2.3.0 or higher. * * @param configs The resources with their configs * @param options The options to use when altering configs * @return The AlterConfigsResult */ AlterConfigsResult incrementalAlterConfigs(Map> configs, AlterConfigsOptions options); /** * Change the log directory for the specified replicas. If the replica does not exist on the broker, the result * shows REPLICA_NOT_AVAILABLE for the given replica and the replica will be created in the given log directory on the * broker when it is created later. If the replica already exists on the broker, the replica will be moved to the given * log directory if it is not already there. For detailed result, inspect the returned {@link AlterReplicaLogDirsResult} instance. *

* This operation is not transactional so it may succeed for some replicas while fail for others. *

* This is a convenience method for {@link #alterReplicaLogDirs(Map, AlterReplicaLogDirsOptions)} with default options. * See the overload for more details. *

* This operation is supported by brokers with version 1.1.0 or higher. * * @param replicaAssignment The replicas with their log directory absolute path * @return The AlterReplicaLogDirsResult * @throws InterruptedException Interrupted while joining I/O thread */ default AlterReplicaLogDirsResult alterReplicaLogDirs(Map replicaAssignment) { return alterReplicaLogDirs(replicaAssignment, new AlterReplicaLogDirsOptions()); } /** * Change the log directory for the specified replicas. If the replica does not exist on the broker, the result * shows REPLICA_NOT_AVAILABLE for the given replica and the replica will be created in the given log directory on the * broker when it is created later. If the replica already exists on the broker, the replica will be moved to the given * log directory if it is not already there. For detailed result, inspect the returned {@link AlterReplicaLogDirsResult} instance. *

* This operation is not transactional so it may succeed for some replicas while fail for others. *

* This operation is supported by brokers with version 1.1.0 or higher. * * @param replicaAssignment The replicas with their log directory absolute path * @param options The options to use when changing replica dir * @return The AlterReplicaLogDirsResult * @throws InterruptedException Interrupted while joining I/O thread */ AlterReplicaLogDirsResult alterReplicaLogDirs(Map replicaAssignment, AlterReplicaLogDirsOptions options); /** * Query the information of all log directories on the given set of brokers *

* This is a convenience method for {@link #describeLogDirs(Collection, DescribeLogDirsOptions)} with default options. * See the overload for more details. *

* This operation is supported by brokers with version 1.0.0 or higher. * * @param brokers A list of brokers * @return The DescribeLogDirsResult */ default DescribeLogDirsResult describeLogDirs(Collection brokers) { return describeLogDirs(brokers, new DescribeLogDirsOptions()); } /** * Query the information of all log directories on the given set of brokers *

* This operation is supported by brokers with version 1.0.0 or higher. * * @param brokers A list of brokers * @param options The options to use when querying log dir info * @return The DescribeLogDirsResult */ DescribeLogDirsResult describeLogDirs(Collection brokers, DescribeLogDirsOptions options); /** * Query the replica log directory information for the specified replicas. *

* This is a convenience method for {@link #describeReplicaLogDirs(Collection, DescribeReplicaLogDirsOptions)} * with default options. See the overload for more details. *

* This operation is supported by brokers with version 1.0.0 or higher. * * @param replicas The replicas to query * @return The DescribeReplicaLogDirsResult */ default DescribeReplicaLogDirsResult describeReplicaLogDirs(Collection replicas) { return describeReplicaLogDirs(replicas, new DescribeReplicaLogDirsOptions()); } /** * Query the replica log directory information for the specified replicas. *

* This operation is supported by brokers with version 1.0.0 or higher. * * @param replicas The replicas to query * @param options The options to use when querying replica log dir info * @return The DescribeReplicaLogDirsResult */ DescribeReplicaLogDirsResult describeReplicaLogDirs(Collection replicas, DescribeReplicaLogDirsOptions options); /** * Increase the number of partitions of the topics given as the keys of {@code newPartitions} * according to the corresponding values. If partitions are increased for a topic that has a key, * the partition logic or ordering of the messages will be affected. *

* This is a convenience method for {@link #createPartitions(Map, CreatePartitionsOptions)} with default options. * See the overload for more details. * * @param newPartitions The topics which should have new partitions created, and corresponding parameters * for the created partitions. * @return The CreatePartitionsResult. */ default CreatePartitionsResult createPartitions(Map newPartitions) { return createPartitions(newPartitions, new CreatePartitionsOptions()); } /** * Increase the number of partitions of the topics given as the keys of {@code newPartitions} * according to the corresponding values. If partitions are increased for a topic that has a key, * the partition logic or ordering of the messages will be affected. *

* This operation is not transactional so it may succeed for some topics while fail for others. *

* It may take several seconds after this method returns * success for all the brokers to become aware that the partitions have been created. * During this time, {@link #describeTopics(Collection)} * may not return information about the new partitions. *

* This operation is supported by brokers with version 1.0.0 or higher. *

* The following exceptions can be anticipated when calling {@code get()} on the futures obtained from the * {@link CreatePartitionsResult#values() values()} method of the returned {@link CreatePartitionsResult} *

    *
  • {@link org.apache.kafka.common.errors.AuthorizationException} * if the authenticated user is not authorized to alter the topic
  • *
  • {@link org.apache.kafka.common.errors.TimeoutException} * if the request was not completed in within the given {@link CreatePartitionsOptions#timeoutMs()}.
  • *
  • {@link org.apache.kafka.common.errors.ReassignmentInProgressException} * if a partition reassignment is currently in progress
  • *
  • {@link org.apache.kafka.common.errors.BrokerNotAvailableException} * if the requested {@link NewPartitions#assignments()} contain a broker that is currently unavailable.
  • *
  • {@link org.apache.kafka.common.errors.InvalidReplicationFactorException} * if no {@link NewPartitions#assignments()} are given and it is impossible for the broker to assign * replicas with the topics replication factor.
  • *
  • Subclasses of {@link org.apache.kafka.common.KafkaException} * if the request is invalid in some way.
  • *
* * @param newPartitions The topics which should have new partitions created, and corresponding parameters * for the created partitions. * @param options The options to use when creating the new partitions. * @return The CreatePartitionsResult. */ CreatePartitionsResult createPartitions(Map newPartitions, CreatePartitionsOptions options); /** * Delete records whose offset is smaller than the given offset of the corresponding partition. *

* This is a convenience method for {@link #deleteRecords(Map, DeleteRecordsOptions)} with default options. * See the overload for more details. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param recordsToDelete The topic partitions and related offsets from which records deletion starts. * @return The DeleteRecordsResult. */ default DeleteRecordsResult deleteRecords(Map recordsToDelete) { return deleteRecords(recordsToDelete, new DeleteRecordsOptions()); } /** * Delete records whose offset is smaller than the given offset of the corresponding partition. *

* This operation is supported by brokers with version 0.11.0.0 or higher. * * @param recordsToDelete The topic partitions and related offsets from which records deletion starts. * @param options The options to use when deleting records. * @return The DeleteRecordsResult. */ DeleteRecordsResult deleteRecords(Map recordsToDelete, DeleteRecordsOptions options); /** * Create a Delegation Token. *

* This is a convenience method for {@link #createDelegationToken(CreateDelegationTokenOptions)} with default options. * See the overload for more details. * * @return The CreateDelegationTokenResult. */ default CreateDelegationTokenResult createDelegationToken() { return createDelegationToken(new CreateDelegationTokenOptions()); } /** * Create a Delegation Token. *

* This operation is supported by brokers with version 1.1.0 or higher. *

* The following exceptions can be anticipated when calling {@code get()} on the futures obtained from the * {@link CreateDelegationTokenResult#delegationToken() delegationToken()} method of the returned {@link CreateDelegationTokenResult} *

    *
  • {@link org.apache.kafka.common.errors.UnsupportedByAuthenticationException} * If the request sent on PLAINTEXT/1-way SSL channels or delegation token authenticated channels.
  • *
  • {@link org.apache.kafka.common.errors.InvalidPrincipalTypeException} * if the renewers principal type is not supported.
  • *
  • {@link org.apache.kafka.common.errors.DelegationTokenDisabledException} * if the delegation token feature is disabled.
  • *
  • {@link org.apache.kafka.common.errors.TimeoutException} * if the request was not completed in within the given {@link CreateDelegationTokenOptions#timeoutMs()}.
  • *
* * @param options The options to use when creating delegation token. * @return The DeleteRecordsResult. */ CreateDelegationTokenResult createDelegationToken(CreateDelegationTokenOptions options); /** * Renew a Delegation Token. *

* This is a convenience method for {@link #renewDelegationToken(byte[], RenewDelegationTokenOptions)} with default options. * See the overload for more details. * * @param hmac HMAC of the Delegation token * @return The RenewDelegationTokenResult. */ default RenewDelegationTokenResult renewDelegationToken(byte[] hmac) { return renewDelegationToken(hmac, new RenewDelegationTokenOptions()); } /** * Renew a Delegation Token. *

* This operation is supported by brokers with version 1.1.0 or higher. *

* The following exceptions can be anticipated when calling {@code get()} on the futures obtained from the * {@link RenewDelegationTokenResult#expiryTimestamp() expiryTimestamp()} method of the returned {@link RenewDelegationTokenResult} *

    *
  • {@link org.apache.kafka.common.errors.UnsupportedByAuthenticationException} * If the request sent on PLAINTEXT/1-way SSL channels or delegation token authenticated channels.
  • *
  • {@link org.apache.kafka.common.errors.DelegationTokenDisabledException} * if the delegation token feature is disabled.
  • *
  • {@link org.apache.kafka.common.errors.DelegationTokenNotFoundException} * if the delegation token is not found on server.
  • *
  • {@link org.apache.kafka.common.errors.DelegationTokenOwnerMismatchException} * if the authenticated user is not owner/renewer of the token.
  • *
  • {@link org.apache.kafka.common.errors.DelegationTokenExpiredException} * if the delegation token is expired.
  • *
  • {@link org.apache.kafka.common.errors.TimeoutException} * if the request was not completed in within the given {@link RenewDelegationTokenOptions#timeoutMs()}.
  • *
* * @param hmac HMAC of the Delegation token * @param options The options to use when renewing delegation token. * @return The RenewDelegationTokenResult. */ RenewDelegationTokenResult renewDelegationToken(byte[] hmac, RenewDelegationTokenOptions options); /** * Expire a Delegation Token. *

* This is a convenience method for {@link #expireDelegationToken(byte[], ExpireDelegationTokenOptions)} with default options. * This will expire the token immediately. See the overload for more details. * * @param hmac HMAC of the Delegation token * @return The ExpireDelegationTokenResult. */ default ExpireDelegationTokenResult expireDelegationToken(byte[] hmac) { return expireDelegationToken(hmac, new ExpireDelegationTokenOptions()); } /** * Expire a Delegation Token. *

* This operation is supported by brokers with version 1.1.0 or higher. *

* The following exceptions can be anticipated when calling {@code get()} on the futures obtained from the * {@link ExpireDelegationTokenResult#expiryTimestamp() expiryTimestamp()} method of the returned {@link ExpireDelegationTokenResult} *

    *
  • {@link org.apache.kafka.common.errors.UnsupportedByAuthenticationException} * If the request sent on PLAINTEXT/1-way SSL channels or delegation token authenticated channels.
  • *
  • {@link org.apache.kafka.common.errors.DelegationTokenDisabledException} * if the delegation token feature is disabled.
  • *
  • {@link org.apache.kafka.common.errors.DelegationTokenNotFoundException} * if the delegation token is not found on server.
  • *
  • {@link org.apache.kafka.common.errors.DelegationTokenOwnerMismatchException} * if the authenticated user is not owner/renewer of the requested token.
  • *
  • {@link org.apache.kafka.common.errors.DelegationTokenExpiredException} * if the delegation token is expired.
  • *
  • {@link org.apache.kafka.common.errors.TimeoutException} * if the request was not completed in within the given {@link ExpireDelegationTokenOptions#timeoutMs()}.
  • *
* * @param hmac HMAC of the Delegation token * @param options The options to use when expiring delegation token. * @return The ExpireDelegationTokenResult. */ ExpireDelegationTokenResult expireDelegationToken(byte[] hmac, ExpireDelegationTokenOptions options); /** * Describe the Delegation Tokens. *

* This is a convenience method for {@link #describeDelegationToken(DescribeDelegationTokenOptions)} with default options. * This will return all the user owned tokens and tokens where user have Describe permission. See the overload for more details. * * @return The DescribeDelegationTokenResult. */ default DescribeDelegationTokenResult describeDelegationToken() { return describeDelegationToken(new DescribeDelegationTokenOptions()); } /** * Describe the Delegation Tokens. *

* This operation is supported by brokers with version 1.1.0 or higher. *

* The following exceptions can be anticipated when calling {@code get()} on the futures obtained from the * {@link DescribeDelegationTokenResult#delegationTokens() delegationTokens()} method of the returned {@link DescribeDelegationTokenResult} *

    *
  • {@link org.apache.kafka.common.errors.UnsupportedByAuthenticationException} * If the request sent on PLAINTEXT/1-way SSL channels or delegation token authenticated channels.
  • *
  • {@link org.apache.kafka.common.errors.DelegationTokenDisabledException} * if the delegation token feature is disabled.
  • *
  • {@link org.apache.kafka.common.errors.TimeoutException} * if the request was not completed in within the given {@link DescribeDelegationTokenOptions#timeoutMs()}.
  • *
* * @param options The options to use when describing delegation tokens. * @return The DescribeDelegationTokenResult. */ DescribeDelegationTokenResult describeDelegationToken(DescribeDelegationTokenOptions options); /** * Describe some group IDs in the cluster. * * @param groupIds The IDs of the groups to describe. * @param options The options to use when describing the groups. * @return The DescribeConsumerGroupResult. */ DescribeConsumerGroupsResult describeConsumerGroups(Collection groupIds, DescribeConsumerGroupsOptions options); /** * Describe some group IDs in the cluster, with the default options. *

* This is a convenience method for {@link #describeConsumerGroups(Collection, DescribeConsumerGroupsOptions)} * with default options. See the overload for more details. * * @param groupIds The IDs of the groups to describe. * @return The DescribeConsumerGroupResult. */ default DescribeConsumerGroupsResult describeConsumerGroups(Collection groupIds) { return describeConsumerGroups(groupIds, new DescribeConsumerGroupsOptions()); } /** * List the consumer groups available in the cluster. * * @param options The options to use when listing the consumer groups. * @return The ListGroupsResult. */ ListConsumerGroupsResult listConsumerGroups(ListConsumerGroupsOptions options); /** * List the consumer groups available in the cluster with the default options. *

* This is a convenience method for {@link #listConsumerGroups(ListConsumerGroupsOptions)} with default options. * See the overload for more details. * * @return The ListGroupsResult. */ default ListConsumerGroupsResult listConsumerGroups() { return listConsumerGroups(new ListConsumerGroupsOptions()); } /** * List the consumer group offsets available in the cluster. * * @param options The options to use when listing the consumer group offsets. * @return The ListGroupOffsetsResult */ ListConsumerGroupOffsetsResult listConsumerGroupOffsets(String groupId, ListConsumerGroupOffsetsOptions options); /** * List the consumer group offsets available in the cluster with the default options. *

* This is a convenience method for {@link #listConsumerGroupOffsets(String, ListConsumerGroupOffsetsOptions)} with default options. * * @return The ListGroupOffsetsResult. */ default ListConsumerGroupOffsetsResult listConsumerGroupOffsets(String groupId) { return listConsumerGroupOffsets(groupId, new ListConsumerGroupOffsetsOptions()); } /** * Delete consumer groups from the cluster. * * @param options The options to use when deleting a consumer group. * @return The DeletConsumerGroupResult. */ DeleteConsumerGroupsResult deleteConsumerGroups(Collection groupIds, DeleteConsumerGroupsOptions options); /** * Delete consumer groups from the cluster with the default options. * * @return The DeleteConsumerGroupResult. */ default DeleteConsumerGroupsResult deleteConsumerGroups(Collection groupIds) { return deleteConsumerGroups(groupIds, new DeleteConsumerGroupsOptions()); } /** * Delete committed offsets for a set of partitions in a consumer group. This will * succeed at the partition level only if the group is not actively subscribed * to the corresponding topic. * * @param options The options to use when deleting offsets in a consumer group. * @return The DeleteConsumerGroupOffsetsResult. */ DeleteConsumerGroupOffsetsResult deleteConsumerGroupOffsets(String groupId, Set partitions, DeleteConsumerGroupOffsetsOptions options); /** * Delete committed offsets for a set of partitions in a consumer group with the default * options. This will succeed at the partition level only if the group is not actively * subscribed to the corresponding topic. * * @return The DeleteConsumerGroupOffsetsResult. */ default DeleteConsumerGroupOffsetsResult deleteConsumerGroupOffsets(String groupId, Set partitions) { return deleteConsumerGroupOffsets(groupId, partitions, new DeleteConsumerGroupOffsetsOptions()); } /** * Elect the preferred replica as leader for topic partitions. *

* This is a convenience method for {@link #electLeaders(ElectionType, Set, ElectLeadersOptions)} * with preferred election type and default options. *

* This operation is supported by brokers with version 2.2.0 or higher. * * @param partitions The partitions for which the preferred leader should be elected. * @return The ElectPreferredLeadersResult. * @deprecated Since 2.4.0. Use {@link #electLeaders(ElectionType, Set)}. */ @Deprecated default ElectPreferredLeadersResult electPreferredLeaders(Collection partitions) { return electPreferredLeaders(partitions, new ElectPreferredLeadersOptions()); } /** * Elect the preferred replica as leader for topic partitions. *

* This is a convenience method for {@link #electLeaders(ElectionType, Set, ElectLeadersOptions)} * with preferred election type. *

* This operation is supported by brokers with version 2.2.0 or higher. * * @param partitions The partitions for which the preferred leader should be elected. * @param options The options to use when electing the preferred leaders. * @return The ElectPreferredLeadersResult. * @deprecated Since 2.4.0. Use {@link #electLeaders(ElectionType, Set, ElectLeadersOptions)}. */ @Deprecated default ElectPreferredLeadersResult electPreferredLeaders(Collection partitions, ElectPreferredLeadersOptions options) { final ElectLeadersOptions newOptions = new ElectLeadersOptions(); newOptions.timeoutMs(options.timeoutMs()); final Set topicPartitions = partitions == null ? null : new HashSet<>(partitions); return new ElectPreferredLeadersResult(electLeaders(ElectionType.PREFERRED, topicPartitions, newOptions)); } /** * Elect a replica as leader for topic partitions. *

* This is a convenience method for {@link #electLeaders(ElectionType, Set, ElectLeadersOptions)} * with default options. * * @param electionType The type of election to conduct. * @param partitions The topics and partitions for which to conduct elections. * @return The ElectLeadersResult. */ default ElectLeadersResult electLeaders(ElectionType electionType, Set partitions) { return electLeaders(electionType, partitions, new ElectLeadersOptions()); } /** * Elect a replica as leader for the given {@code partitions}, or for all partitions if the argument * to {@code partitions} is null. *

* This operation is not transactional so it may succeed for some partitions while fail for others. *

* It may take several seconds after this method returns success for all the brokers in the cluster * to become aware that the partitions have new leaders. During this time, * {@link #describeTopics(Collection)} may not return information about the partitions' * new leaders. *

* This operation is supported by brokers with version 2.2.0 or later if preferred election is use; * otherwise the brokers most be 2.4.0 or higher. *

* The following exceptions can be anticipated when calling {@code get()} on the future obtained * from the returned {@link ElectLeadersResult}: *

    *
  • {@link org.apache.kafka.common.errors.ClusterAuthorizationException} * if the authenticated user didn't have alter access to the cluster.
  • *
  • {@link org.apache.kafka.common.errors.UnknownTopicOrPartitionException} * if the topic or partition did not exist within the cluster.
  • *
  • {@link org.apache.kafka.common.errors.InvalidTopicException} * if the topic was already queued for deletion.
  • *
  • {@link org.apache.kafka.common.errors.NotControllerException} * if the request was sent to a broker that was not the controller for the cluster.
  • *
  • {@link org.apache.kafka.common.errors.TimeoutException} * if the request timed out before the election was complete.
  • *
  • {@link org.apache.kafka.common.errors.LeaderNotAvailableException} * if the preferred leader was not alive or not in the ISR.
  • *
* * @param electionType The type of election to conduct. * @param partitions The topics and partitions for which to conduct elections. * @param options The options to use when electing the leaders. * @return The ElectLeadersResult. */ ElectLeadersResult electLeaders( ElectionType electionType, Set partitions, ElectLeadersOptions options); /** * Change the reassignments for one or more partitions. * Providing an empty Optional (e.g via {@link Optional#empty()}) will revert the reassignment for the associated partition. * * This is a convenience method for {@link #alterPartitionReassignments(Map, AlterPartitionReassignmentsOptions)} * with default options. See the overload for more details. */ default AlterPartitionReassignmentsResult alterPartitionReassignments( Map> reassignments) { return alterPartitionReassignments(reassignments, new AlterPartitionReassignmentsOptions()); } /** * Change the reassignments for one or more partitions. * Providing an empty Optional (e.g via {@link Optional#empty()}) will revert the reassignment for the associated partition. * *

The following exceptions can be anticipated when calling {@code get()} on the futures obtained from * the returned {@code AlterPartitionReassignmentsResult}:

*
    *
  • {@link org.apache.kafka.common.errors.ClusterAuthorizationException} * If the authenticated user didn't have alter access to the cluster.
  • *
  • {@link org.apache.kafka.common.errors.UnknownTopicOrPartitionException} * If the topic or partition does not exist within the cluster.
  • *
  • {@link org.apache.kafka.common.errors.TimeoutException} * if the request timed out before the controller could record the new assignments.
  • *
  • {@link org.apache.kafka.common.errors.InvalidReplicaAssignmentException} * If the specified assignment was not valid.
  • *
  • {@link org.apache.kafka.common.errors.NoReassignmentInProgressException} * If there was an attempt to cancel a reassignment for a partition which was not being reassigned.
  • *
* * @param reassignments The reassignments to add, modify, or remove. See {@link NewPartitionReassignment}. * @param options The options to use. * @return The result. */ AlterPartitionReassignmentsResult alterPartitionReassignments( Map> reassignments, AlterPartitionReassignmentsOptions options); /** * List all of the current partition reassignments * * This is a convenience method for {@link #listPartitionReassignments(ListPartitionReassignmentsOptions)} * with default options. See the overload for more details. */ default ListPartitionReassignmentsResult listPartitionReassignments() { return listPartitionReassignments(new ListPartitionReassignmentsOptions()); } /** * List the current reassignments for the given partitions * * This is a convenience method for {@link #listPartitionReassignments(Set, ListPartitionReassignmentsOptions)} * with default options. See the overload for more details. */ default ListPartitionReassignmentsResult listPartitionReassignments(Set partitions) { return listPartitionReassignments(partitions, new ListPartitionReassignmentsOptions()); } /** * List the current reassignments for the given partitions * *

The following exceptions can be anticipated when calling {@code get()} on the futures obtained from * the returned {@code ListPartitionReassignmentsResult}:

*
    *
  • {@link org.apache.kafka.common.errors.ClusterAuthorizationException} * If the authenticated user doesn't have alter access to the cluster.
  • *
  • {@link org.apache.kafka.common.errors.UnknownTopicOrPartitionException} * If a given topic or partition does not exist.
  • *
  • {@link org.apache.kafka.common.errors.TimeoutException} * If the request timed out before the controller could list the current reassignments.
  • *
* * @param partitions The topic partitions to list reassignments for. * @param options The options to use. * @return The result. */ default ListPartitionReassignmentsResult listPartitionReassignments( Set partitions, ListPartitionReassignmentsOptions options) { return listPartitionReassignments(Optional.of(partitions), options); } /** * List all of the current partition reassignments * *

The following exceptions can be anticipated when calling {@code get()} on the futures obtained from * the returned {@code ListPartitionReassignmentsResult}:

*
    *
  • {@link org.apache.kafka.common.errors.ClusterAuthorizationException} * If the authenticated user doesn't have alter access to the cluster.
  • *
  • {@link org.apache.kafka.common.errors.UnknownTopicOrPartitionException} * If a given topic or partition does not exist.
  • *
  • {@link org.apache.kafka.common.errors.TimeoutException} * If the request timed out before the controller could list the current reassignments.
  • *
* * @param options The options to use. * @return The result. */ default ListPartitionReassignmentsResult listPartitionReassignments(ListPartitionReassignmentsOptions options) { return listPartitionReassignments(Optional.empty(), options); } /** * @param partitions the partitions we want to get reassignment for, or an empty optional if we want to get the reassignments for all partitions in the cluster * @param options The options to use. * @return The result. */ ListPartitionReassignmentsResult listPartitionReassignments(Optional> partitions, ListPartitionReassignmentsOptions options); /** * Remove members from the consumer group by given member identities. *

* For possible error codes, refer to {@link LeaveGroupResponse}. * * @param groupId The ID of the group to remove member from. * @param options The options to carry removing members' information. * @return The MembershipChangeResult. */ RemoveMembersFromConsumerGroupResult removeMembersFromConsumerGroup(String groupId, RemoveMembersFromConsumerGroupOptions options); /** *

Alters offsets for the specified group. In order to succeed, the group must be empty. * *

This is a convenience method for {@link #alterConsumerGroupOffsets(String, Map, AlterConsumerGroupOffsetsOptions)} with default options. * See the overload for more details. * * @param groupId The group for which to alter offsets. * @param offsets A map of offsets by partition with associated metadata. * @return The AlterOffsetsResult. */ default AlterConsumerGroupOffsetsResult alterConsumerGroupOffsets(String groupId, Map offsets) { return alterConsumerGroupOffsets(groupId, offsets, new AlterConsumerGroupOffsetsOptions()); } /** *

Alters offsets for the specified group. In order to succeed, the group must be empty. * *

This operation is not transactional so it may succeed for some partitions while fail for others. * * @param groupId The group for which to alter offsets. * @param offsets A map of offsets by partition with associated metadata. Partitions not specified in the map are ignored. * @param options The options to use when altering the offsets. * @return The AlterOffsetsResult. */ AlterConsumerGroupOffsetsResult alterConsumerGroupOffsets(String groupId, Map offsets, AlterConsumerGroupOffsetsOptions options); /** *

List offset for the specified partitions and OffsetSpec. This operation enables to find * the beginning offset, end offset as well as the offset matching a timestamp in partitions. * *

This is a convenience method for {@link #listOffsets(Map, ListOffsetsOptions)} * * @param topicPartitionOffsets The mapping from partition to the OffsetSpec to look up. * @return The ListOffsetsResult. */ default ListOffsetsResult listOffsets(Map topicPartitionOffsets) { return listOffsets(topicPartitionOffsets, new ListOffsetsOptions()); } /** *

List offset for the specified partitions. This operation enables to find * the beginning offset, end offset as well as the offset matching a timestamp in partitions. * * @param topicPartitionOffsets The mapping from partition to the OffsetSpec to look up. * @param options The options to use when retrieving the offsets * @return The ListOffsetsResult. */ ListOffsetsResult listOffsets(Map topicPartitionOffsets, ListOffsetsOptions options); /** * Describes all entities matching the provided filter that have at least one client quota configuration * value defined. *

* This is a convenience method for {@link #describeClientQuotas(ClientQuotaFilter, DescribeClientQuotasOptions)} * with default options. See the overload for more details. *

* This operation is supported by brokers with version 2.6.0 or higher. * * @param filter the filter to apply to match entities * @return the DescribeClientQuotasResult containing the result */ default DescribeClientQuotasResult describeClientQuotas(ClientQuotaFilter filter) { return describeClientQuotas(filter, new DescribeClientQuotasOptions()); } /** * Describes all entities matching the provided filter that have at least one client quota configuration * value defined. *

* The following exceptions can be anticipated when calling {@code get()} on the future from the * returned {@link DescribeClientQuotasResult}: *

    *
  • {@link org.apache.kafka.common.errors.ClusterAuthorizationException} * If the authenticated user didn't have describe access to the cluster.
  • *
  • {@link org.apache.kafka.common.errors.InvalidRequestException} * If the request details are invalid. e.g., an invalid entity type was specified.
  • *
  • {@link org.apache.kafka.common.errors.TimeoutException} * If the request timed out before the describe could finish.
  • *
*

* This operation is supported by brokers with version 2.6.0 or higher. * * @param filter the filter to apply to match entities * @param options the options to use * @return the DescribeClientQuotasResult containing the result */ DescribeClientQuotasResult describeClientQuotas(ClientQuotaFilter filter, DescribeClientQuotasOptions options); /** * Alters client quota configurations with the specified alterations. *

* This is a convenience method for {@link #alterClientQuotas(Collection, AlterClientQuotasOptions)} * with default options. See the overload for more details. *

* This operation is supported by brokers with version 2.6.0 or higher. * * @param entries the alterations to perform * @return the AlterClientQuotasResult containing the result */ default AlterClientQuotasResult alterClientQuotas(Collection entries) { return alterClientQuotas(entries, new AlterClientQuotasOptions()); } /** * Alters client quota configurations with the specified alterations. *

* Alterations for a single entity are atomic, but across entities is not guaranteed. The resulting * per-entity error code should be evaluated to resolve the success or failure of all updates. *

* The following exceptions can be anticipated when calling {@code get()} on the futures obtained from * the returned {@link AlterClientQuotasResult}: *

    *
  • {@link org.apache.kafka.common.errors.ClusterAuthorizationException} * If the authenticated user didn't have alter access to the cluster.
  • *
  • {@link org.apache.kafka.common.errors.InvalidRequestException} * If the request details are invalid. e.g., a configuration key was specified more than once for an entity.
  • *
  • {@link org.apache.kafka.common.errors.TimeoutException} * If the request timed out before the alterations could finish. It cannot be guaranteed whether the update * succeed or not.
  • *
*

* This operation is supported by brokers with version 2.6.0 or higher. * * @param entries the alterations to perform * @return the AlterClientQuotasResult containing the result */ AlterClientQuotasResult alterClientQuotas(Collection entries, AlterClientQuotasOptions options); /** * Get the metrics kept by the adminClient */ Map metrics(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy