@Override public synchronized Map<String, List<PartitionInfo>> listTopics() { ensureNotClosed(); return partitions; }
@SuppressWarnings("deprecation") @Override public synchronized void close(long timeout, TimeUnit unit) { ensureNotClosed(); this.closed = true; }
@Override public synchronized List<PartitionInfo> partitionsFor(String topic) { ensureNotClosed(); return this.partitions.get(topic); }
@Override public synchronized Map<MetricName, ? extends Metric> metrics() { ensureNotClosed(); return Collections.emptyMap(); }
public synchronized void updatePartitions(String topic, List<PartitionInfo> partitions) { ensureNotClosed(); this.partitions.put(topic, partitions); }
@Override public synchronized void assign(Collection<TopicPartition> partitions) { ensureNotClosed(); committed.clear(); this.subscriptions.assignFromUser(new HashSet<>(partitions)); }
@Override public synchronized void seek(TopicPartition partition, long offset) { ensureNotClosed(); subscriptions.seek(partition, offset); }
@Override public synchronized void seekToBeginning(Collection<TopicPartition> partitions) { ensureNotClosed(); for (TopicPartition tp : partitions) subscriptions.requestOffsetReset(tp, OffsetResetStrategy.EARLIEST); }
@Override public synchronized void subscribe(Collection<String> topics, final ConsumerRebalanceListener listener) { ensureNotClosed(); committed.clear(); this.subscriptions.subscribe(new HashSet<>(topics), listener); }
@Override public synchronized void commitAsync(Map<TopicPartition, OffsetAndMetadata> offsets, OffsetCommitCallback callback) { ensureNotClosed(); for (Map.Entry<TopicPartition, OffsetAndMetadata> entry : offsets.entrySet()) committed.put(entry.getKey(), entry.getValue()); if (callback != null) { callback.onComplete(offsets, null); } }
@Override public synchronized void unsubscribe() { ensureNotClosed(); committed.clear(); subscriptions.unsubscribe(); }
@Override public synchronized void seekToEnd(Collection<TopicPartition> partitions) { ensureNotClosed(); for (TopicPartition tp : partitions) subscriptions.requestOffsetReset(tp, OffsetResetStrategy.LATEST); }
public synchronized void addRecord(ConsumerRecord<K, V> record) { ensureNotClosed(); TopicPartition tp = new TopicPartition(record.topic(), record.partition()); Set<TopicPartition> currentAssigned = new HashSet<>(this.subscriptions.assignedPartitions()); if (!currentAssigned.contains(tp)) throw new IllegalStateException("Cannot add records for a partition that is not assigned to the consumer"); List<ConsumerRecord<K, V>> recs = this.records.computeIfAbsent(tp, k -> new ArrayList<>()); recs.add(record); }
@Override public synchronized OffsetAndMetadata committed(TopicPartition partition) { ensureNotClosed(); if (subscriptions.isAssigned(partition)) { return committed.get(partition); } return new OffsetAndMetadata(0); }
@Override public synchronized void commitAsync(OffsetCommitCallback callback) { ensureNotClosed(); commitAsync(this.subscriptions.allConsumed(), callback); }
@Override public void seek(TopicPartition partition, OffsetAndMetadata offsetAndMetadata) { ensureNotClosed(); subscriptions.seek(partition, offsetAndMetadata.offset()); }
@Override public synchronized void subscribe(Pattern pattern, final ConsumerRebalanceListener listener) { ensureNotClosed(); committed.clear(); this.subscriptions.subscribe(pattern, listener); Set<String> topicsToSubscribe = new HashSet<>(); for (String topic: partitions.keySet()) { if (pattern.matcher(topic).matches() && !subscriptions.subscription().contains(topic)) topicsToSubscribe.add(topic); } ensureNotClosed(); this.subscriptions.subscribeFromPattern(topicsToSubscribe); final Set<TopicPartition> assignedPartitions = new HashSet<>(); for (final String topic : topicsToSubscribe) { for (final PartitionInfo info : this.partitions.get(topic)) { assignedPartitions.add(new TopicPartition(topic, info.partition())); } } subscriptions.assignFromSubscribed(assignedPartitions); }
@Override public synchronized long position(TopicPartition partition) { ensureNotClosed(); if (!this.subscriptions.isAssigned(partition)) throw new IllegalArgumentException("You can only check the position for partitions assigned to this consumer."); Long offset = this.subscriptions.position(partition); if (offset == null) { updateFetchPosition(partition); offset = this.subscriptions.position(partition); } return offset; }
@Override public synchronized ConsumerRecords<K, V> poll(final Duration timeout) { ensureNotClosed();