Kafka指定topic分区的偏移量 Exception in thread "main" java.lang.IllegalStateException: No current assignment

本文探讨了在使用KafkaConsumer时遇到的指定分区偏移量消费问题,详细解析了错误原因并提供了有效的解决方案。文章指出,在尝试指定分区偏移量前进行一次poll操作是必要的,这有助于初始化消费者的状态。

在kafka中,我想指定分区的偏移量开始消费

        KafkaConsumer<Integer,String> consumer = new KafkaConsumer(props);
        consumer.subscribe(Arrays.asList("test"));
        consumer.seek(new TopicPartition("test",0),0l);
Exception in thread "main" java.lang.IllegalStateException: No current assignment for partition test-0
    at org.apache.kafka.clients.consumer.internals.SubscriptionState.assignedState(SubscriptionState.java:268)
    at org.apache.kafka.clients.consumer.internals.SubscriptionState.seek(SubscriptionState.java:293)
    at org.apache.kafka.clients.consumer.KafkaConsumer.seek(KafkaConsumer.java:1139)
    at KafkaConsumerDemo.main(KafkaConsumerDemo.java:25)

google一下

https://stackoverflow.com/questions/41008610/kafkaconsumer-0-10-java-api-error-message-no-current-assignment-for-partition
大意是说要先poll一次才可以.

        KafkaConsumer<Integer,String> consumer = new KafkaConsumer(props);
        consumer.subscribe(Arrays.asList("test"));
        ConsumerRecords<Integer, String> recordTemp = consumer.poll(0);
        System.out.println(recordTemp.isEmpty());
        consumer.seek(new TopicPartition("test",0),0l);

这样确实解决了问题,从报错的原因可以看出

    /* the list of partitions currently assigned */
    //无论使用什么订阅模式,都使用此集合记录每个topic的消费状态  
    private final Map<TopicPartition, TopicPartitionState> assignment;

是上面这个字段导致的,只有第一次启动才会导致这个问题. poll方法又拉取数据,又帮忙初始化元数据.下面分析一下,第一次poll,它有没有去拉数据,干了什么?


通过阅读代码,发现其实第一次poll也拉取了数据,不过由于偏移量不是我们想要的,就被丢弃了

  // we are interested in this fetch only if the beginning offset matches the
                // current consumed position
                //仅仅当开的偏移量 匹配当前消费的位置,我们才对这次拉取有兴趣
                Long position = subscriptions.position(tp);
                if (position == null || position != fetchOffset) {
                    log.debug("Discarding stale fetch response for partition {} since its offset {} does not match " +
                            "the expected offset {}", tp, fetchOffset, position);
                    return null;
                }

同时也可以看到日志

[2018-08-24 11:46:24,273] DEBUG Discarding stale fetch response for partition testBug-0 since its offset 61898 does not match the expected offset 10 (org.apache.kafka.clients.consumer.internals.Fetcher)


2025-10-13 13:48:14.797 INFO 8472 --- [ main] c.t.nbu.demo.basicspringboot.DelayApp : Starting DelayApp using Java 1.8.0_462-462 on 18088363-BG with PID 8472 (D:\r\idmdemo\target\classes started by admin in D:\r\idmdemo) 2025-10-13 13:48:14.798 INFO 8472 --- [ main] c.t.nbu.demo.basicspringboot.DelayApp : No active profile set, falling back to 1 default profile: "default" 2025-10-13 13:48:15.428 INFO 8472 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2025-10-13 13:48:15.434 INFO 8472 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2025-10-13 13:48:15.435 INFO 8472 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.71] 2025-10-13 13:48:15.493 INFO 8472 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2025-10-13 13:48:15.494 INFO 8472 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 674 ms 2025-10-13 13:48:15.932 INFO 8472 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint(s) beneath base path '/actuator' 2025-10-13 13:48:15.964 INFO 8472 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2025-10-13 13:48:15.972 INFO 8472 --- [ main] c.t.nbu.demo.basicspringboot.DelayApp : Started DelayApp in 1.386 seconds (JVM running for 1.703) 2025-10-13 13:48:15.990 INFO 8472 --- [ main] c.t.s.e.port.kafka.KafkaEventCenter : start to register topic: delay_topic_level_2, groupId: delay_level_2 2025-10-13 13:48:16.008 INFO 8472 --- [2_delay_level_2] o.a.k.clients.consumer.ConsumerConfig : ConsumerConfig values: allow.auto.create.topics = true auto.commit.interval.ms = 5000 auto.offset.reset = latest bootstrap.servers = [192.168.203.128:9092] check.crcs = true client.dns.lookup = use_all_dns_ips client.id = consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1 client.rack = connections.max.idle.ms = 540000 default.api.timeout.ms = 60000 enable.auto.commit = false exclude.internal.topics = true fetch.max.bytes = 52428800 fetch.max.wait.ms = 500 fetch.min.bytes = 1 group.id = delay_level_2 group.instance.id = null heartbeat.interval.ms = 3000 interceptor.classes = [] internal.leave.group.on.close = true internal.throw.on.fetch.stable.offset.unsupported = false isolation.level = read_uncommitted key.deserializer = class org.apache.kafka.common.serialization.StringDeserializer max.partition.fetch.bytes = 1048576 max.poll.interval.ms = 300000 max.poll.records = 200 metadata.max.age.ms = 300000 metric.reporters = [] metrics.num.samples = 2 metrics.recording.level = INFO metrics.sample.window.ms = 30000 partition.assignment.strategy = [org.apache.kafka.clients.consumer.CooperativeStickyAssignor] receive.buffer.bytes = -1 reconnect.backoff.max.ms = 1000 reconnect.backoff.ms = 50 request.timeout.ms = 30000 retry.backoff.ms = 100 sasl.client.callback.handler.class = null sasl.jaas.config = null sasl.kerberos.kinit.cmd = /usr/bin/kinit sasl.kerberos.min.time.before.relogin = 60000 sasl.kerberos.service.name = null sasl.kerberos.ticket.renew.jitter = 0.05 sasl.kerberos.ticket.renew.window.factor = 0.8 sasl.login.callback.handler.class = null sasl.login.class = null sasl.login.refresh.buffer.seconds = 300 sasl.login.refresh.min.period.seconds = 60 sasl.login.refresh.window.factor = 0.8 sasl.login.refresh.window.jitter = 0.05 sasl.mechanism = GSSAPI security.protocol = PLAINTEXT security.providers = null send.buffer.bytes = 131072 session.timeout.ms = 45000 socket.connection.setup.timeout.max.ms = 30000 socket.connection.setup.timeout.ms = 10000 ssl.cipher.suites = null ssl.enabled.protocols = [TLSv1.2] ssl.endpoint.identification.algorithm = https ssl.engine.factory.class = null ssl.key.password = null ssl.keymanager.algorithm = SunX509 ssl.keystore.certificate.chain = null ssl.keystore.key = null ssl.keystore.location = null ssl.keystore.password = null ssl.keystore.type = JKS ssl.protocol = TLSv1.2 ssl.provider = null ssl.secure.random.implementation = null ssl.trustmanager.algorithm = PKIX ssl.truststore.certificates = null ssl.truststore.location = null ssl.truststore.password = null ssl.truststore.type = JKS value.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer 2025-10-13 13:48:16.022 INFO 8472 --- [ main] o.a.k.clients.producer.ProducerConfig : ProducerConfig values: acks = -1 batch.size = 4096 bootstrap.servers = [192.168.203.128:9092] buffer.memory = 33554432 client.dns.lookup = use_all_dns_ips client.id = producer-1 compression.type = none connections.max.idle.ms = 540000 delivery.timeout.ms = 120000 enable.idempotence = false interceptor.classes = [] internal.auto.downgrade.txn.commit = false key.serializer = class org.apache.kafka.common.serialization.StringSerializer linger.ms = 1 max.block.ms = 60000 max.in.flight.requests.per.connection = 5 max.request.size = 1048576 metadata.max.age.ms = 300000 metadata.max.idle.ms = 300000 metric.reporters = [] metrics.num.samples = 2 metrics.recording.level = INFO metrics.sample.window.ms = 30000 partitioner.class = class org.apache.kafka.clients.producer.internals.DefaultPartitioner receive.buffer.bytes = 32768 reconnect.backoff.max.ms = 1000 reconnect.backoff.ms = 50 request.timeout.ms = 30000 retries = 2147483647 retry.backoff.ms = 100 sasl.client.callback.handler.class = null sasl.jaas.config = null sasl.kerberos.kinit.cmd = /usr/bin/kinit sasl.kerberos.min.time.before.relogin = 60000 sasl.kerberos.service.name = null sasl.kerberos.ticket.renew.jitter = 0.05 sasl.kerberos.ticket.renew.window.factor = 0.8 sasl.login.callback.handler.class = null sasl.login.class = null sasl.login.refresh.buffer.seconds = 300 sasl.login.refresh.min.period.seconds = 60 sasl.login.refresh.window.factor = 0.8 sasl.login.refresh.window.jitter = 0.05 sasl.mechanism = GSSAPI security.protocol = PLAINTEXT security.providers = null send.buffer.bytes = 131072 socket.connection.setup.timeout.max.ms = 30000 socket.connection.setup.timeout.ms = 10000 ssl.cipher.suites = null ssl.enabled.protocols = [TLSv1.2] ssl.endpoint.identification.algorithm = https ssl.engine.factory.class = null ssl.key.password = null ssl.keymanager.algorithm = SunX509 ssl.keystore.certificate.chain = null ssl.keystore.key = null ssl.keystore.location = null ssl.keystore.password = null ssl.keystore.type = JKS ssl.protocol = TLSv1.2 ssl.provider = null ssl.secure.random.implementation = null ssl.trustmanager.algorithm = PKIX ssl.truststore.certificates = null ssl.truststore.location = null ssl.truststore.password = null ssl.truststore.type = JKS transaction.timeout.ms = 60000 transactional.id = null value.serializer = class org.apache.kafka.common.serialization.ByteArraySerializer 2025-10-13 13:48:16.040 INFO 8472 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka version: 2.8.0 2025-10-13 13:48:16.040 INFO 8472 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: ebb1d6e21cc92130 2025-10-13 13:48:16.041 INFO 8472 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1760334496040 2025-10-13 13:48:16.049 INFO 8472 --- [2_delay_level_2] o.a.kafka.common.utils.AppInfoParser : Kafka version: 2.8.0 2025-10-13 13:48:16.049 INFO 8472 --- [2_delay_level_2] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: ebb1d6e21cc92130 2025-10-13 13:48:16.049 INFO 8472 --- [2_delay_level_2] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1760334496049 2025-10-13 13:48:16.049 INFO 8472 --- [2_delay_level_2] c.t.s.e.p.k.c.GenericKafkaConsumerTask : start to consumer kafka topic: delay_topic_level_2 2025-10-13 13:48:16.049 INFO 8472 --- [2_delay_level_2] c.t.s.e.p.k.c.AbstractTaskService : KafkaConsumerTask is running! topic:delay_topic_level_2 2025-10-13 13:48:16.050 INFO 8472 --- [2_delay_level_2] o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] Subscribed to topic(s): delay_topic_level_2 2025-10-13 13:48:16.202 INFO 8472 --- [2_delay_level_2] org.apache.kafka.clients.Metadata : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] Cluster ID: Cp8MopI8TC6QJ8pHpIkP9A 2025-10-13 13:48:16.202 INFO 8472 --- [ad | producer-1] org.apache.kafka.clients.Metadata : [Producer clientId=producer-1] Cluster ID: Cp8MopI8TC6QJ8pHpIkP9A 2025-10-13 13:48:16.202 INFO 8472 --- [2_delay_level_2] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] Discovered group coordinator admin1-virtual-machine:9092 (id: 2147483647 rack: null) 2025-10-13 13:48:16.628 INFO 8472 --- [2_delay_level_2] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] (Re-)joining group 2025-10-13 13:48:16.640 INFO 8472 --- [2_delay_level_2] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] (Re-)joining group 2025-10-13 13:48:16.642 INFO 8472 --- [2_delay_level_2] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] Successfully joined group with generation Generation{generationId=13, memberId='consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1-9ac5180a-9832-4fa7-9922-1f3cf3bc2ea2', protocol='cooperative-sticky'} 2025-10-13 13:48:16.643 INFO 8472 --- [2_delay_level_2] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] Finished assignment for group at generation 13: {consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1-9ac5180a-9832-4fa7-9922-1f3cf3bc2ea2=Assignment(partitions=[delay_topic_level_2-0])} 2025-10-13 13:48:16.645 INFO 8472 --- [2_delay_level_2] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] Successfully synced group in generation Generation{generationId=13, memberId='consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1-9ac5180a-9832-4fa7-9922-1f3cf3bc2ea2', protocol='cooperative-sticky'} 2025-10-13 13:48:16.646 INFO 8472 --- [2_delay_level_2] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] Updating assignment with Assigned partitions: [delay_topic_level_2-0] Current owned partitions: [] Added partitions (assigned - owned): [delay_topic_level_2-0] Revoked partitions (owned - assigned): [] 2025-10-13 13:48:16.646 INFO 8472 --- [2_delay_level_2] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] Notifying assignor about the new Assignment(partitions=[delay_topic_level_2-0]) 2025-10-13 13:48:16.647 INFO 8472 --- [2_delay_level_2] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] Adding newly assigned partitions: delay_topic_level_2-0 2025-10-13 13:48:16.647 INFO 8472 --- [2_delay_level_2] com.tplink.smb.eventcenter.api.Handler : ending rebalance! 2025-10-13 13:48:16.651 INFO 8472 --- [2_delay_level_2] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_157fe467-4c84-4181-8757-7901a902c7a1, groupId=delay_level_2] Setting offset for partition delay_topic_level_2-0 to the committed offset FetchPosition{offset=3, offsetEpoch=Optional.empty, currentLeader=LeaderAndEpoch{leader=Optional[admin1-virtual-machine:9092 (id: 0 rack: null)], epoch=absent}}private void registerEventConsumer() { GenericEventHandler<DelayEvent> eventHandler = event -> { long startTime = System.currentTimeMillis(); KafkaConsumer<?, ?> delayConsumer = null; while (System.currentTimeMillis() - startTime < 10000) { try { delayConsumer = eventCenter.getDelayConsumerByTopic("delay_topic_level_2"); break; } catch (IllegalStateException e) { // 等待100ms后重试 try { Thread.sleep(100); } catch (InterruptedException ex) { throw new RuntimeException(ex); } } } if (delayConsumer == null) { log.error("获取消费者实例超时"); return; } log.info("这是测试消息{}", delayConsumer.getClass()); }; eventCenter.registerUnicastGenerically( EVENT_TOPIC, "delay_level_2", eventHandler, ForkJoinPool.commonPool(), PartitionAssignorMode.COOPERATIVE_STICKY, DelayEvent.class ); }请分析并解决,public KafkaConsumer<?, ?> getDelayConsumerByTopic(String topic) { synchronized (lock) { List<ConsumerInfoAggregator> consumerList = consumerMap.get(topic); if (consumerList == null || consumerList.isEmpty()) { throw new IllegalStateException(String.format("No consumers registered for topic [%s]", topic)); } if (consumerList.size() > 1) { log.warn("Multiple consumers found for single-partition topic [{}], using the first one", topic); } ConsumerInfoAggregator aggregator = consumerList.get(0); KafkaConsumerTask consumerTask = aggregator.getKafkaConsumerTask(); if (consumerTask == null) { throw new IllegalStateException(String.format("KafkaConsumerTask not found for topic [%s]", topic)); } // 4. 验证消费者是否正在运行 if (!consumerTask.isRunning()) { throw new IllegalStateException(String.format("Consumer for topic [%s] is not running", topic)); } // 5. 返回消费者实例 KafkaConsumer<?, ?> consumer = consumerTask.getConsumer(); if (consumer == null) { throw new IllegalStateException(String.format("Consumer instance for topic [%s] is null", topic)); } return consumer; } } 消费者实例为什么无法获取
10-14
public void sendDelay(@Nonnull String topic, String key, Integer partition, @Nonnull Event event, long delayMs, @Nonnull DelayQueueStrategy strategy) { try { int level = strategy.getTargetDelayLevel(delayMs); String delayTopic = String.format("delay_topic_level_%d", level); event.setTimeStamp(System.currentTimeMillis()); long expirationTime = event.getTimeStamp() + FIXED_DELAY_LEVELS.get(level - 1); DelayEvent delayEvent = new DelayEvent(topic,key,partition,event,expirationTime); log.info(" level={}, expirationTime={}", level, expirationTime); sendGenerically(delayTopic,delayEvent); } catch (Exception e) { log.error("sendDelay失败", e); } } public void pauseTopic(String topic) { List<ConsumerInfoAggregator> aggregators = consumerMap.get(topic); if (aggregators == null || aggregators.isEmpty()) { throw new IllegalStateException("Topic not registered: " + topic); } for (ConsumerInfoAggregator aggregator : aggregators) { try { Future<?> pauseFuture = aggregator.pause(); pauseFuture.get(); // 阻塞等待pause任务实际执行完成 log.info("暂停成功,topic: {}", topic); // 仅在操作完成后输出 } catch (InterruptedException | ExecutionException e) { throw new RuntimeException("暂停失败", e); } } } public void resumeTopic(String topic) { List<ConsumerInfoAggregator> aggregators = consumerMap.get(topic); if (aggregators == null || aggregators.isEmpty()) { throw new IllegalStateException("Topic not registered: " + topic); } for (ConsumerInfoAggregator aggregator : aggregators) { try { Future<?> resumeFuture = aggregator.resume(); resumeFuture.get(); // 阻塞等待resume任务实际执行完成 log.info("恢复成功,topic: {}", topic); // 仅在操作完成后输出 } catch (InterruptedException | ExecutionException e) { throw new RuntimeException("恢复失败", e); } } } /** * 将原始事件转发到目标Topic */ public void forwardToTargetTopic(DelayEvent delayEvent) { try { log.info("准备转发延迟消息: "); send( delayEvent.getTopic(), delayEvent.getPartition(), delayEvent.getEvent() ); log.info("延迟事件已转发,targetTopic: {}", delayEvent.getTopic()); } catch (Exception e) { log.error("转发延迟事件失败,targetTopic: {}", delayEvent.getTopic(), e); } } /** * 注册延迟消费者(使用已有调度器) * @param delayTopic 延迟主题(如"delay_topic_level_2") * @param executorService 消费者任务执行线程池 */ public void registerDelayConsumer(String delayTopic, ExecutorService executorService) { String delayGroupId = "delay_consumer_group"; // 构造延迟处理器时,注入已有scheduledExecutorService log.info("注册延迟消费者"); DelayHandler delayHandler = new DelayHandler(this,scheduledExecutorService); registerUnicastGenerically( delayTopic, // 监听的延迟主题 delayGroupId, // 延迟消费者固定组ID delayHandler, executorService, DelayEvent.class// 使用延迟处理器 ); log.info("注册延迟消费者成功"); } @Override public <T> void registerUnicastGenerically(@Nonnull String topic, @Nonnull String groupId, @Nonnull GenericEventHandler<T> handler, @Nonnull ExecutorService executorService, PartitionAssignorMode partitionAssignorMode, @NonNull Class<T> clazz) { partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode); register(topic, groupId, handler, executorService, partitionAssignorMode, clazz, SerializeEnum.JSON); }@Slf4j @RequiredArgsConstructor public class DelayHandler implements GenericEventHandler<DelayEvent> { private final KafkaEventCenter eventCenter; private final ScheduledExecutorService delayScheduler; private final Map<String, Boolean> pausedTopics = new ConcurrentHashMap<>(); @Override public void handleEvent(DelayEvent delayEvent) { log.info("进入handleEvent"); long currentTime = System.currentTimeMillis(); long expirationTime = delayEvent.getExpirationTime(); String targetTopic = delayEvent.getTopic(); // 如果已过期直接转发 if (expirationTime <= currentTime) { eventCenter.forwardToTargetTopic(delayEvent); return; } else { // 未过期则暂停目标Topic消费 pauseTargetTopic(targetTopic); // 计算需要等待的时间 long delayMs = expirationTime - currentTime; // 注册延迟任务:到期后恢复Topic并转发事件 delayScheduler.schedule(() -> { log.info("触发延迟任务,目标主题={}, 当前时间={}", targetTopic, System.currentTimeMillis()); resumeTargetTopic(targetTopic); eventCenter.forwardToTargetTopic(delayEvent); }, delayMs, TimeUnit.MILLISECONDS); } } /** * 暂停目标Topic的消费者 */ private void pauseTargetTopic(String targetTopic) { if (pausedTopics.putIfAbsent(targetTopic, true) == null) { try { eventCenter.pauseTopic(targetTopic); log.info("已暂停延迟Topic消费,targetTopic: {}", targetTopic); } catch (Exception e) { log.error("暂停Topic失败,targetTopic: {}", targetTopic, e); pausedTopics.remove(targetTopic); } } } /** * 恢复目标Topic的消费者 */ private void resumeTargetTopic(String targetTopic) { if (pausedTopics.remove(targetTopic) != null) { try { eventCenter.resumeTopic(targetTopic); log.info("已恢复延迟Topic消费,targetTopic: {}", targetTopic); } catch (Exception e) { log.error("恢复Topic失败,targetTopic: {}", targetTopic, e); } } } } @Getter @Slf4j @ToString @AllArgsConstructor public class DelayEvent { private final String topic; private final String key; private final Integer partition; private final Event event; private final long expirationTime; }2025-10-14 14:44:51.730 INFO 2104 --- [ main] c.t.n.demo.basicspringboot.DelayConsume : Starting DelayConsume using Java 1.8.0_462-462 on 18088363-BG with PID 2104 (D:\r\idmdemo\target\classes started by admin in D:\r\idmdemo) 2025-10-14 14:44:51.732 INFO 2104 --- [ main] c.t.n.demo.basicspringboot.DelayConsume : No active profile set, falling back to 1 default profile: "default" 2025-10-14 14:44:52.326 INFO 2104 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2025-10-14 14:44:52.332 INFO 2104 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2025-10-14 14:44:52.333 INFO 2104 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.71] 2025-10-14 14:44:52.391 INFO 2104 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2025-10-14 14:44:52.392 INFO 2104 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 637 ms 2025-10-14 14:44:52.813 INFO 2104 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint(s) beneath base path '/actuator' 2025-10-14 14:44:52.838 INFO 2104 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2025-10-14 14:44:52.845 INFO 2104 --- [ main] c.t.n.demo.basicspringboot.DelayConsume : Started DelayConsume in 1.322 seconds (JVM running for 1.602) 2025-10-14 14:44:52.860 INFO 2104 --- [ main] c.t.s.e.port.kafka.KafkaEventCenter : 注册延迟消费者 2025-10-14 14:44:52.860 INFO 2104 --- [ main] c.t.s.e.port.kafka.KafkaEventCenter : start to register topic: delay_topic_level_3, groupId: delay_consumer_group 2025-10-14 14:44:52.865 INFO 2104 --- [ main] c.t.s.e.port.kafka.KafkaEventCenter : 注册延迟消费者成功 2025-10-14 14:44:52.865 INFO 2104 --- [ main] c.t.s.e.port.kafka.KafkaEventCenter : start to register topic: vms_dlq_hello-topic, groupId: delay 2025-10-14 14:44:52.866 INFO 2104 --- [ main] c.t.s.e.port.kafka.KafkaEventCenter : level=3, expirationTime=1760424295866 2025-10-14 14:44:52.876 INFO 2104 --- [llo-topic_delay] o.a.k.clients.consumer.ConsumerConfig : ConsumerConfig values: allow.auto.create.topics = true auto.commit.interval.ms = 5000 auto.offset.reset = latest bootstrap.servers = [192.168.203.128:9092] check.crcs = true client.dns.lookup = use_all_dns_ips client.id = consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a client.rack = connections.max.idle.ms = 540000 default.api.timeout.ms = 60000 enable.auto.commit = false exclude.internal.topics = true fetch.max.bytes = 52428800 fetch.max.wait.ms = 500 fetch.min.bytes = 1 group.id = delay group.instance.id = null heartbeat.interval.ms = 3000 interceptor.classes = [] internal.leave.group.on.close = true internal.throw.on.fetch.stable.offset.unsupported = false isolation.level = read_uncommitted key.deserializer = class org.apache.kafka.common.serialization.StringDeserializer max.partition.fetch.bytes = 1048576 max.poll.interval.ms = 300000 max.poll.records = 200 metadata.max.age.ms = 300000 metric.reporters = [] metrics.num.samples = 2 metrics.recording.level = INFO metrics.sample.window.ms = 30000 partition.assignment.strategy = [org.apache.kafka.clients.consumer.CooperativeStickyAssignor] receive.buffer.bytes = -1 reconnect.backoff.max.ms = 1000 reconnect.backoff.ms = 50 request.timeout.ms = 30000 retry.backoff.ms = 100 sasl.client.callback.handler.class = null sasl.jaas.config = null sasl.kerberos.kinit.cmd = /usr/bin/kinit sasl.kerberos.min.time.before.relogin = 60000 sasl.kerberos.service.name = null sasl.kerberos.ticket.renew.jitter = 0.05 sasl.kerberos.ticket.renew.window.factor = 0.8 sasl.login.callback.handler.class = null sasl.login.class = null sasl.login.refresh.buffer.seconds = 300 sasl.login.refresh.min.period.seconds = 60 sasl.login.refresh.window.factor = 0.8 sasl.login.refresh.window.jitter = 0.05 sasl.mechanism = GSSAPI security.protocol = PLAINTEXT security.providers = null send.buffer.bytes = 131072 session.timeout.ms = 45000 socket.connection.setup.timeout.max.ms = 30000 socket.connection.setup.timeout.ms = 10000 ssl.cipher.suites = null ssl.enabled.protocols = [TLSv1.2] ssl.endpoint.identification.algorithm = https ssl.engine.factory.class = null ssl.key.password = null ssl.keymanager.algorithm = SunX509 ssl.keystore.certificate.chain = null ssl.keystore.key = null ssl.keystore.location = null ssl.keystore.password = null ssl.keystore.type = JKS ssl.protocol = TLSv1.2 ssl.provider = null ssl.secure.random.implementation = null ssl.trustmanager.algorithm = PKIX ssl.truststore.certificates = null ssl.truststore.location = null ssl.truststore.password = null ssl.truststore.type = JKS value.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer 2025-10-14 14:44:52.876 INFO 2104 --- [_consumer_group] o.a.k.clients.consumer.ConsumerConfig : ConsumerConfig values: allow.auto.create.topics = true auto.commit.interval.ms = 5000 auto.offset.reset = latest bootstrap.servers = [192.168.203.128:9092] check.crcs = true client.dns.lookup = use_all_dns_ips client.id = consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659 client.rack = connections.max.idle.ms = 540000 default.api.timeout.ms = 60000 enable.auto.commit = false exclude.internal.topics = true fetch.max.bytes = 52428800 fetch.max.wait.ms = 500 fetch.min.bytes = 1 group.id = delay_consumer_group group.instance.id = null heartbeat.interval.ms = 3000 interceptor.classes = [] internal.leave.group.on.close = true internal.throw.on.fetch.stable.offset.unsupported = false isolation.level = read_uncommitted key.deserializer = class org.apache.kafka.common.serialization.StringDeserializer max.partition.fetch.bytes = 1048576 max.poll.interval.ms = 300000 max.poll.records = 200 metadata.max.age.ms = 300000 metric.reporters = [] metrics.num.samples = 2 metrics.recording.level = INFO metrics.sample.window.ms = 30000 partition.assignment.strategy = [org.apache.kafka.clients.consumer.CooperativeStickyAssignor] receive.buffer.bytes = -1 reconnect.backoff.max.ms = 1000 reconnect.backoff.ms = 50 request.timeout.ms = 30000 retry.backoff.ms = 100 sasl.client.callback.handler.class = null sasl.jaas.config = null sasl.kerberos.kinit.cmd = /usr/bin/kinit sasl.kerberos.min.time.before.relogin = 60000 sasl.kerberos.service.name = null sasl.kerberos.ticket.renew.jitter = 0.05 sasl.kerberos.ticket.renew.window.factor = 0.8 sasl.login.callback.handler.class = null sasl.login.class = null sasl.login.refresh.buffer.seconds = 300 sasl.login.refresh.min.period.seconds = 60 sasl.login.refresh.window.factor = 0.8 sasl.login.refresh.window.jitter = 0.05 sasl.mechanism = GSSAPI security.protocol = PLAINTEXT security.providers = null send.buffer.bytes = 131072 session.timeout.ms = 45000 socket.connection.setup.timeout.max.ms = 30000 socket.connection.setup.timeout.ms = 10000 ssl.cipher.suites = null ssl.enabled.protocols = [TLSv1.2] ssl.endpoint.identification.algorithm = https ssl.engine.factory.class = null ssl.key.password = null ssl.keymanager.algorithm = SunX509 ssl.keystore.certificate.chain = null ssl.keystore.key = null ssl.keystore.location = null ssl.keystore.password = null ssl.keystore.type = JKS ssl.protocol = TLSv1.2 ssl.provider = null ssl.secure.random.implementation = null ssl.trustmanager.algorithm = PKIX ssl.truststore.certificates = null ssl.truststore.location = null ssl.truststore.password = null ssl.truststore.type = JKS value.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer 2025-10-14 14:44:52.890 INFO 2104 --- [ main] o.a.k.clients.producer.ProducerConfig : ProducerConfig values: acks = -1 batch.size = 4096 bootstrap.servers = [192.168.203.128:9092] buffer.memory = 33554432 client.dns.lookup = use_all_dns_ips client.id = producer-1 compression.type = none connections.max.idle.ms = 540000 delivery.timeout.ms = 120000 enable.idempotence = false interceptor.classes = [] internal.auto.downgrade.txn.commit = false key.serializer = class org.apache.kafka.common.serialization.StringSerializer linger.ms = 1 max.block.ms = 60000 max.in.flight.requests.per.connection = 5 max.request.size = 1048576 metadata.max.age.ms = 300000 metadata.max.idle.ms = 300000 metric.reporters = [] metrics.num.samples = 2 metrics.recording.level = INFO metrics.sample.window.ms = 30000 partitioner.class = class org.apache.kafka.clients.producer.internals.DefaultPartitioner receive.buffer.bytes = 32768 reconnect.backoff.max.ms = 1000 reconnect.backoff.ms = 50 request.timeout.ms = 30000 retries = 2147483647 retry.backoff.ms = 100 sasl.client.callback.handler.class = null sasl.jaas.config = null sasl.kerberos.kinit.cmd = /usr/bin/kinit sasl.kerberos.min.time.before.relogin = 60000 sasl.kerberos.service.name = null sasl.kerberos.ticket.renew.jitter = 0.05 sasl.kerberos.ticket.renew.window.factor = 0.8 sasl.login.callback.handler.class = null sasl.login.class = null sasl.login.refresh.buffer.seconds = 300 sasl.login.refresh.min.period.seconds = 60 sasl.login.refresh.window.factor = 0.8 sasl.login.refresh.window.jitter = 0.05 sasl.mechanism = GSSAPI security.protocol = PLAINTEXT security.providers = null send.buffer.bytes = 131072 socket.connection.setup.timeout.max.ms = 30000 socket.connection.setup.timeout.ms = 10000 ssl.cipher.suites = null ssl.enabled.protocols = [TLSv1.2] ssl.endpoint.identification.algorithm = https ssl.engine.factory.class = null ssl.key.password = null ssl.keymanager.algorithm = SunX509 ssl.keystore.certificate.chain = null ssl.keystore.key = null ssl.keystore.location = null ssl.keystore.password = null ssl.keystore.type = JKS ssl.protocol = TLSv1.2 ssl.provider = null ssl.secure.random.implementation = null ssl.trustmanager.algorithm = PKIX ssl.truststore.certificates = null ssl.truststore.location = null ssl.truststore.password = null ssl.truststore.type = JKS transaction.timeout.ms = 60000 transactional.id = null value.serializer = class org.apache.kafka.common.serialization.ByteArraySerializer 2025-10-14 14:44:52.910 INFO 2104 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka version: 2.8.0 2025-10-14 14:44:52.910 INFO 2104 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: ebb1d6e21cc92130 2025-10-14 14:44:52.910 INFO 2104 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1760424292909 2025-10-14 14:44:52.919 INFO 2104 --- [llo-topic_delay] o.a.kafka.common.utils.AppInfoParser : Kafka version: 2.8.0 2025-10-14 14:44:52.919 INFO 2104 --- [llo-topic_delay] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: ebb1d6e21cc92130 2025-10-14 14:44:52.919 INFO 2104 --- [llo-topic_delay] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1760424292919 2025-10-14 14:44:52.920 INFO 2104 --- [_consumer_group] o.a.kafka.common.utils.AppInfoParser : Kafka version: 2.8.0 2025-10-14 14:44:52.920 INFO 2104 --- [llo-topic_delay] c.t.s.e.p.k.consumer.KafkaConsumerTask : start to consumer kafka topic: vms_dlq_hello-topic 2025-10-14 14:44:52.920 INFO 2104 --- [_consumer_group] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: ebb1d6e21cc92130 2025-10-14 14:44:52.920 INFO 2104 --- [_consumer_group] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1760424292919 2025-10-14 14:44:52.920 INFO 2104 --- [llo-topic_delay] c.t.s.e.p.k.c.AbstractTaskService : KafkaConsumerTask is running! topic:vms_dlq_hello-topic 2025-10-14 14:44:52.920 INFO 2104 --- [_consumer_group] c.t.s.e.p.k.c.GenericKafkaConsumerTask : start to consumer kafka topic: delay_topic_level_3 2025-10-14 14:44:52.920 INFO 2104 --- [_consumer_group] c.t.s.e.p.k.c.AbstractTaskService : KafkaConsumerTask is running! topic:delay_topic_level_3 2025-10-14 14:44:52.920 INFO 2104 --- [llo-topic_delay] o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] Subscribed to topic(s): vms_dlq_hello-topic 2025-10-14 14:44:52.920 INFO 2104 --- [_consumer_group] o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] Subscribed to topic(s): delay_topic_level_3 2025-10-14 14:44:53.075 INFO 2104 --- [ad | producer-1] org.apache.kafka.clients.Metadata : [Producer clientId=producer-1] Cluster ID: Cp8MopI8TC6QJ8pHpIkP9A 2025-10-14 14:44:53.075 INFO 2104 --- [_consumer_group] org.apache.kafka.clients.Metadata : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] Cluster ID: Cp8MopI8TC6QJ8pHpIkP9A 2025-10-14 14:44:53.075 INFO 2104 --- [llo-topic_delay] org.apache.kafka.clients.Metadata : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] Cluster ID: Cp8MopI8TC6QJ8pHpIkP9A 2025-10-14 14:44:53.076 INFO 2104 --- [_consumer_group] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] Discovered group coordinator admin1-virtual-machine:9092 (id: 2147483647 rack: null) 2025-10-14 14:44:53.076 INFO 2104 --- [llo-topic_delay] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] Discovered group coordinator admin1-virtual-machine:9092 (id: 2147483647 rack: null) 2025-10-14 14:44:53.509 INFO 2104 --- [llo-topic_delay] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] (Re-)joining group 2025-10-14 14:44:53.509 INFO 2104 --- [_consumer_group] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] (Re-)joining group 2025-10-14 14:44:53.526 INFO 2104 --- [_consumer_group] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] (Re-)joining group 2025-10-14 14:44:53.526 INFO 2104 --- [llo-topic_delay] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] (Re-)joining group 2025-10-14 14:44:53.528 INFO 2104 --- [_consumer_group] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] Successfully joined group with generation Generation{generationId=63, memberId='consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659-48b17b61-7110-4b85-beaf-a96c861c0b4a', protocol='cooperative-sticky'} 2025-10-14 14:44:53.528 INFO 2104 --- [llo-topic_delay] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] Successfully joined group with generation Generation{generationId=141, memberId='consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a-fb16d243-8234-4596-afa6-1b512107d285', protocol='cooperative-sticky'} 2025-10-14 14:44:53.529 INFO 2104 --- [_consumer_group] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] Finished assignment for group at generation 63: {consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659-48b17b61-7110-4b85-beaf-a96c861c0b4a=Assignment(partitions=[delay_topic_level_3-0])} 2025-10-14 14:44:53.529 INFO 2104 --- [llo-topic_delay] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] Finished assignment for group at generation 141: {consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a-fb16d243-8234-4596-afa6-1b512107d285=Assignment(partitions=[vms_dlq_hello-topic-0])} 2025-10-14 14:44:53.531 INFO 2104 --- [_consumer_group] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] Successfully synced group in generation Generation{generationId=63, memberId='consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659-48b17b61-7110-4b85-beaf-a96c861c0b4a', protocol='cooperative-sticky'} 2025-10-14 14:44:53.531 INFO 2104 --- [llo-topic_delay] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] Successfully synced group in generation Generation{generationId=141, memberId='consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a-fb16d243-8234-4596-afa6-1b512107d285', protocol='cooperative-sticky'} 2025-10-14 14:44:53.531 INFO 2104 --- [_consumer_group] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] Updating assignment with Assigned partitions: [delay_topic_level_3-0] Current owned partitions: [] Added partitions (assigned - owned): [delay_topic_level_3-0] Revoked partitions (owned - assigned): [] 2025-10-14 14:44:53.531 INFO 2104 --- [_consumer_group] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] Notifying assignor about the new Assignment(partitions=[delay_topic_level_3-0]) 2025-10-14 14:44:53.531 INFO 2104 --- [llo-topic_delay] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] Updating assignment with Assigned partitions: [vms_dlq_hello-topic-0] Current owned partitions: [] Added partitions (assigned - owned): [vms_dlq_hello-topic-0] Revoked partitions (owned - assigned): [] 2025-10-14 14:44:53.532 INFO 2104 --- [llo-topic_delay] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] Notifying assignor about the new Assignment(partitions=[vms_dlq_hello-topic-0]) 2025-10-14 14:44:53.532 INFO 2104 --- [_consumer_group] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] Adding newly assigned partitions: delay_topic_level_3-0 2025-10-14 14:44:53.532 INFO 2104 --- [llo-topic_delay] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] Adding newly assigned partitions: vms_dlq_hello-topic-0 2025-10-14 14:44:53.532 INFO 2104 --- [llo-topic_delay] com.tplink.smb.eventcenter.api.Handler : ending rebalance! 2025-10-14 14:44:53.532 INFO 2104 --- [_consumer_group] com.tplink.smb.eventcenter.api.Handler : ending rebalance! 2025-10-14 14:44:53.537 INFO 2104 --- [llo-topic_delay] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_e587b296-407e-4859-94e2-447a8aec643a, groupId=delay] Setting offset for partition vms_dlq_hello-topic-0 to the committed offset FetchPosition{offset=0, offsetEpoch=Optional.empty, currentLeader=LeaderAndEpoch{leader=Optional[admin1-virtual-machine:9092 (id: 0 rack: null)], epoch=absent}} 2025-10-14 14:44:53.537 INFO 2104 --- [_consumer_group] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer_10.13.35.30_2c3b8a03-39b3-4f22-b768-823620bd7659, groupId=delay_consumer_group] Setting offset for partition delay_topic_level_3-0 to the committed offset FetchPosition{offset=2, offsetEpoch=Optional.empty, currentLeader=LeaderAndEpoch{leader=Optional[admin1-virtual-machine:9092 (id: 0 rack: null)], epoch=absent}}请分析为何未成功触发转发逻辑
最新发布
10-15
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值