我想在Kafka
生成记录之前验证分区大小。
我有一个自定义分区类,它给出了我的消息应该丢弃的确切分区号。
现在我的要求是我想在发送记录之前检查分区的大小。
List<String> users = userService.findAllUsers();
for (String user : users) {
String msg = "Hello " + user;
//Check size here
producer.send(new ProducerRecord<String, String>(topic, user, msg), new Callback() {
public void onCompletion(RecordMetadata metadata, Exception e) {
if (e != null) {
e.printStackTrace();
}
}
});
卡夫卡有什么方法可以实现这个目标吗?
答案 0 :(得分:1)
容量纯粹是卡夫卡经纪人级别方面。 基本上,如果代理的数据目录中有磁盘空间,您可以传递消息。代理会根据时间和分区大小(代理配置中的内容)清除消息,因此,如果您相应地配置代理,则可能始终有空间 - 旧消息将被丢弃。它可能不适合您的业务用例。
此外,回复您的评论Can we check size of Topic
,您实际上可以使用beginningOffsets
&amp;来检查分区的当前大小。 endOffsets
中的KafkaConsumer
方法。请注意,如果分区不存在,这些方法可能会阻塞(至少在0.10.2
中)。例如当主题实际包含3个分区时,请求分区4的数据。
Kafka 0.11在客户端引入了管理功能,但它仍在进行中。