java not available_Java Errors.COORDINATOR_NOT_AVAILABLE属性代码示例

这段代码详细展示了Kafka消费者在处理OffsetCommitResponse时的逻辑,包括错误处理、授权失败、元数据过大、协调者状态检查等。当遇到不同错误时,代码会进行相应的记录、重试或抛出异常。此外,还关注了组成员权限和主题授权问题。
摘要由CSDN通过智能技术生成

@Override

public void handle(OffsetCommitResponse commitResponse, RequestFuture future) {

sensors.commitLatency.record(response.requestLatencyMs());

Set unauthorizedTopics = new HashSet<>();

for (Map.Entry entry : commitResponse.responseData().entrySet()) {

TopicPartition tp = entry.getKey();

OffsetAndMetadata offsetAndMetadata = this.offsets.get(tp);

long offset = offsetAndMetadata.offset();

Errors error = entry.getValue();

if (error == Errors.NONE) {

log.debug("Group {} committed offset {} for partition {}", groupId, offset, tp);

if (subscriptions.isAssigned(tp))

// update the local cache only if the partition is still assigned

subscriptions.committed(tp, offsetAndMetadata);

} else if (error == Errors.GROUP_AUTHORIZATION_FAILED) {

log.error("Not authorized to commit offsets for group {}", groupId);

future.raise(new GroupAuthorizationException(groupId));

return;

} else if (error == Errors.TOPIC_AUTHORIZATION_FAILED) {

unauthorizedTopics.add(tp.topic());

} else if (error == Errors.OFFSET_METADATA_TOO_LARGE

|| error == Errors.INVALID_COMMIT_OFFSET_SIZE) {

// raise the error to the user

log.debug("Offset commit for group {} failed on partition {}: {}", groupId, tp, error.message());

future.raise(error);

return;

} else if (error == Errors.COORDINATOR_LOAD_IN_PROGRESS) {

// just retry

log.debug("Offset commit for group {} failed: {}", groupId, error.message());

future.raise(error);

return;

} else if (error == Errors.COORDINATOR_NOT_AVAILABLE

|| error == Errors.NOT_COORDINATOR

|| error == Errors.REQUEST_TIMED_OUT) {

log.debug("Offset commit for group {} failed: {}", groupId, error.message());

coordinatorDead();

future.raise(error);

return;

} else if (error == Errors.UNKNOWN_MEMBER_ID

|| error == Errors.ILLEGAL_GENERATION

|| error == Errors.REBALANCE_IN_PROGRESS) {

// need to re-join group

log.debug("Offset commit for group {} failed: {}", groupId, error.message());

resetGeneration();

future.raise(new CommitFailedException());

return;

} else if (error == Errors.UNKNOWN_TOPIC_OR_PARTITION) {

log.debug("Offset commit for group {} failed on partition {}: {}", groupId, tp, error.message());

future.raise(new KafkaException("Partition " + tp + " may not exist or user may not have Describe access to topic"));

return;

} else {

log.error("Group {} failed to commit partition {} at offset {}: {}", groupId, tp, offset, error.message());

future.raise(new KafkaException("Unexpected error in commit: " + error.message()));

return;

}

}

if (!unauthorizedTopics.isEmpty()) {

log.error("Not authorized to commit to topics {} for group {}", unauthorizedTopics, groupId);

future.raise(new TopicAuthorizationException(unauthorizedTopics));

} else {

future.complete(null);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值