我想将所有分区的偏移量重置为特定值...。我看到kafka-consumer-groups.sh提供了-from-file选项,将偏移量重置为CSV文件中定义的值
任何人都可以共享此csv文件的内容/格式和示例命令吗?
例如:
./kafka_2.12-2.1.1/bin/kafka-consumer-groups.sh --bootstrap-server ${KAFKA_BROKER} --group ${GROUP_NAME} --topic ${TOPIC} --reset-offsets --from-file offsets.csv --execute
offsets.csv的内容/格式是什么?
答案 0 :(得分:1)
Csv文件格式为(每一行包含有关一个分区的信息):
topicName,partitionNumber,offset
topicName,partitionNumber,offset
示例csv内容(reset-policy.csv
)。
someTopic1,0,1
someTopic2,1,5
基于csv文件重置偏移量的命令是:
./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group gr1 --from-file reset-policy.csv --reset-offsets --execute
答案 1 :(得分:1)
@wardziniak的答案是所要求的关键信息,但是我可以添加以下有用的花絮:
您可以使用--export
的{{1}}命令从现有信息创建CSV文件,而无需通过kafka-consumer-groups
进行任何更改。例如:
--dry-run
值bin/kafka-consumer-groups \
--bootstrap-server $KAFKA \
--export --group $GROUP_NAME --topic $TOPIC \
--reset-offsets --to-current \
--dry-run
可以更改为其他各种值,例如--to-current
,--to-datetime
等。
该命令的输出是--by-period
必需的必需CSV文件。
一个非常有用的用例是将偏移量从一个消费者组复制到另一个消费者组,例如:
--from-file
答案 2 :(得分:0)
如果您计划在 Java 应用程序中更改偏移量,您可以使用 AdminClient's API alterConsumerGroupOffsets
。
这是一个用 Kafka 2.8.0 测试的简单示例:
String brokers = "localhost:9092";
String consumerGroupName = "test1337";
TopicPartition topicPartition = new TopicPartition("test", 0);
Long offset = 4L;
Map<TopicPartition, OffsetAndMetadata> toOffset = new HashMap<>();
toOffset.put(topicPartition, new OffsetAndMetadata(offset));
// Create AdminClient
final Properties properties = new Properties();
properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, brokers);
AdminClient adminClient = AdminClient.create(properties);
try {
// Check offsets before altering
KafkaFuture<Map<TopicPartition, OffsetAndMetadata>> offsetsBeforeResetFuture = adminClient.listConsumerGroupOffsets(consumerGroupName).partitionsToOffsetAndMetadata();
System.out.println("Before: " + offsetsBeforeResetFuture.get().toString());
// Alter offsets
adminClient.alterConsumerGroupOffsets(consumerGroupName, toOffset).partitionResult(topicPartition).get();
// Check offsets after altering
KafkaFuture<Map<TopicPartition, OffsetAndMetadata>> offsetsAfterResetFuture = adminClient.listConsumerGroupOffsets(consumerGroupName).partitionsToOffsetAndMetadata();
System.out.println("After: " + offsetsAfterResetFuture.get().toString());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} finally {
adminClient.close();
}
这会打印出来
Before: {test-0=OffsetAndMetadata{offset=1, leaderEpoch=null, metadata=''}}
After: {test-0=OffsetAndMetadata{offset=4, leaderEpoch=null, metadata=''}}
您可以扩展该示例以加载一个 csv 文件,该文件包含有关消费者组、主题、分区和该分区的新偏移量的所有信息。