Admin Operations
Administrative operations for topics, groups, and cluster management.
All operations below use the SurgewaveNativeClient which provides domain-specific operation groups: Topics, Cluster, Groups, Admin, Schema, Connect, and Transactions.
Topic Management
Create Topic
await client.Topics.CreateAsync("new-topic",
partitions: 3,
replicationFactor: 1);
// With configuration using fluent builder
await client.Topics.Create("configured-topic")
.WithPartitions(6)
.WithReplicationFactor(3)
.WithConfig("retention.ms", "604800000") // 7 days
.WithConfig("cleanup.policy", "delete")
.ExecuteAsync();
// Ephemeral topic with ring-buffer (no persistence)
await client.Topics.Create("sensor-data")
.WithPartitions(1)
.WithConfig("cleanup.policy", "ephemeral")
.WithConfig("ephemeral.buffer.bytes", "67108864") // 64 MB ring buffer
.ExecuteAsync();
List Topics
var topics = await client.Topics.ListAsync();
foreach (var topic in topics)
{
Console.WriteLine($"{topic.Name} ({topic.PartitionCount} partitions)");
}
Describe Topic
var info = await client.Topics.DescribeAsync("my-topic");
Console.WriteLine($"Topic: {info.Name}");
Console.WriteLine($"Partitions: {info.PartitionCount}");
foreach (var partition in info.Partitions)
{
Console.WriteLine($" P{partition.Id}: Leader={partition.Leader}");
}
// Get topic configuration
var config = await client.Topics.DescribeConfigAsync("my-topic");
foreach (var (key, value) in config)
Console.WriteLine($" {key} = {value}");
Delete Topic
await client.Topics.DeleteAsync("old-topic");
Alter Topic Config
await client.Topics.AlterConfigAsync("my-topic", new Dictionary<string, string>
{
["retention.ms"] = "172800000" // 2 days
});
Consumer Group Management
List Groups
var groups = await client.Groups.ListAsync();
foreach (var group in groups)
{
Console.WriteLine($"{group.GroupId}: {group.State}");
}
Describe Group
var group = await client.Groups.DescribeAsync("my-group");
Console.WriteLine($"Group: {group.GroupId}");
Console.WriteLine($"State: {group.State}");
foreach (var member in group.Members)
{
Console.WriteLine($" Member: {member.MemberId}");
Console.WriteLine($" Client: {member.ClientId}");
Console.WriteLine($" Partitions: {string.Join(",", member.Assignments)}");
}
Delete Group
await client.Groups.DeleteAsync("inactive-group");
Cluster Operations
Get Cluster Info
var cluster = await client.Cluster.GetClusterInfoAsync();
Console.WriteLine($"Cluster ID: {cluster.ClusterId}");
Console.WriteLine($"Controller: {cluster.ControllerId}");
foreach (var broker in cluster.Brokers)
{
Console.WriteLine($" Broker {broker.Id}: {broker.Host}:{broker.Port}");
}
Describe Broker Config
var config = await client.Admin.DescribeBrokerConfigAsync(brokerId: 1);
foreach (var entry in config)
{
Console.WriteLine($"{entry.Name}: {entry.Value}");
}
ACL Management
Describe ACLs
var result = await client.Admin.DescribeAclsAsync(
resourceType: AclResourceType.Topic,
resourceName: "my-topic");
foreach (var acl in result.Entries)
{
Console.WriteLine($"{acl.Principal} {acl.Permission} {acl.Operation} on {acl.ResourceName}");
}
Create ACLs
var entries = new List<AclEntry>
{
new()
{
ResourceType = AclResourceType.Topic,
ResourceName = "my-topic",
PatternType = AclPatternType.Literal,
Principal = "User:alice",
Host = "*",
Operation = AclOperation.Read,
Permission = AclPermission.Allow
}
};
var results = await client.Admin.CreateAclsAsync(entries);
Delete ACLs
var result = await client.Admin.DeleteAclsAsync(
resourceType: AclResourceType.Topic,
resourceName: "my-topic",
principal: "User:alice");
Partition Operations
Elect Leader
// Leader election
var results = await client.Admin.ElectLeaderAsync(
ElectionType.Preferred,
new Dictionary<string, List<int>>
{
["my-topic"] = [0, 1, 2]
});
Reassign Partitions
var reassignments = new List<PartitionReassignmentRequest>
{
new("my-topic", 0, [1, 2, 3])
};
await client.Cluster.AlterPartitionReassignmentsAsync(reassignments);
Quota Management
Get Quotas
var quota = await client.Admin.GetQuotaConfigAsync();
Console.WriteLine($"Produce rate: {quota.ProduceRateLimit} bytes/sec");
Console.WriteLine($"Fetch rate: {quota.FetchRateLimit} bytes/sec");
Console.WriteLine($"Enabled: {quota.Enabled}");
Set Quotas
await client.Admin.SetQuotaConfigAsync(
produceRateLimit: 10 * 1024 * 1024, // 10 MB/s
fetchRateLimit: 50 * 1024 * 1024, // 50 MB/s
enabled: true);
Error Handling
try
{
await client.Topics.CreateAsync("existing-topic", 3, 1);
}
catch (ProtocolException ex)
{
Console.WriteLine($"Operation failed: {ex.ErrorCode}");
}
catch (InvalidOperationException ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
CLI Equivalents
| API Method | CLI Command |
|---|---|
client.Topics.CreateAsync() |
surgewave topics create |
client.Topics.ListAsync() |
surgewave topics list |
client.Topics.DescribeAsync() |
surgewave topics describe |
client.Topics.DeleteAsync() |
surgewave topics delete |
client.Groups.ListAsync() |
surgewave groups list |
client.Groups.DescribeAsync() |
surgewave groups describe |
client.Admin.DescribeAclsAsync() |
surgewave acls list |
Next Steps
- Security - ACL configuration
- Clustering - Multi-broker operations
- CLI Reference - Command-line tools