@Override protected void onJoinPrepare(int generation, String memberId) { // commit offsets prior to rebalance if auto-commit enabled maybeAutoCommitOffsetsSync(time.timer(rebalanceTimeoutMs)); // execute the user's callback before rebalance ConsumerRebalanceListener listener = subscriptions.rebalanceListener(); // copy since about to be handed to user code Set<TopicPartition> revoked = new HashSet<>(subscriptions.assignedPartitions()); log.info("Revoking previously assigned partitions {}", revoked); try { listener.onPartitionsRevoked(revoked); } catch (WakeupException | InterruptException e) { throw e; } catch (Exception e) { log.error("User provided listener {} failed on partition revocation", listener.getClass().getName(), e); } isLeader = false; subscriptions.resetGroupSubscription(); }
/** * Assign partitions to the KafkaConsumer. * @param <K> The consumer key type * @param <V> The consumer value type * @param consumer The Kafka consumer to assign partitions to * @param newAssignment The partitions to assign. * @param listener The rebalance listener to call back on when the assignment changes */ public <K, V> void assignPartitions(Consumer<K, V> consumer, Set<TopicPartition> newAssignment, ConsumerRebalanceListener listener) { Set<TopicPartition> currentAssignment = consumer.assignment(); if (!newAssignment.equals(currentAssignment)) { listener.onPartitionsRevoked(currentAssignment); consumer.assign(newAssignment); listener.onPartitionsAssigned(newAssignment); } }
inOrder.verify(listenerMock).onPartitionsRevoked(Collections.emptySet()); inOrder.verify(consumerMock).assign(new HashSet<>(onePartition)); inOrder.verify(listenerMock).onPartitionsAssigned(new HashSet<>(onePartition)); inOrder.verify(listenerMock).onPartitionsRevoked(new HashSet<>(onePartition)); inOrder.verify(consumerMock).assign(new HashSet<>(twoPartitions)); inOrder.verify(listenerMock).onPartitionsAssigned(new HashSet<>(twoPartitions));
consumerRebalanceListener.onPartitionsRevoked(assignedPartitions); consumerRebalanceListener.onPartitionsAssigned(Collections.singleton(assignedPartition)); when(consumerMock.assignment()).thenReturn(Collections.singleton(assignedPartition));
consumerRebalanceListener.onPartitionsRevoked(assignedPartitions); Set<TopicPartition> newAssignedPartitions = new HashSet<>(); newAssignedPartitions.add(assignedPartition);
@Override public void onPartitionsRevoked(Collection<TopicPartition> partitions) { if (KafkaMessageSource.this.logger.isInfoEnabled()) { KafkaMessageSource.this.logger.info("Partitions revoked: " + partitions); } if (KafkaMessageSource.this.rebalanceListener != null) { KafkaMessageSource.this.rebalanceListener.onPartitionsRevoked(partitions); } }
@Override public void onPartitionsRevoked(Collection<TopicPartition> partitions) { if (KafkaMessageSource.this.logger.isInfoEnabled()) { KafkaMessageSource.this.logger.info("Partitions revoked: " + partitions); } if (KafkaMessageSource.this.rebalanceListener != null) { KafkaMessageSource.this.rebalanceListener.onPartitionsRevoked(partitions); } }
@Override public void onPartitionsRevoked(Collection<TopicPartition> topicPartitions) { LOG.debug("Consumer rebalancing. Revoked partitions: {}", topicPartitions); // Record the partitions that might be revoked, if the partitions are really revoked, we need to clean up // the state. _partitionsRemoved.clear(); _partitionsRemoved.addAll(topicPartitions); try { // Fire user listener. _userListener.onPartitionsRevoked(topicPartitions); // Commit offset if auto commit is enabled. if (_autoCommitEnabled) { _consumer.commitSync(); } } finally { _consumerRecordsProcessor.clearAllConsumerHighWaterMarks(); } }
private void doUnAssign() { if (assignment.size() > 0 && rebalanceCallback != null) rebalanceCallback.onPartitionsRevoked(assignment); assignment.clear(); paused.clear(); offsets.clear(); }
@Override public void refreshAssignment() { List<TopicPartition> allPartitions = partitionFilter.getFilteredTopicPartitions(consumer); Collections.sort(allPartitions, TopicPartitionComparator.INSTANCE); Set<TopicPartition> newAssignment = new HashSet<>(partitioner.partition(allPartitions, context)); Set<TopicPartition> currentAssignment = consumer.assignment(); if (!newAssignment.equals(currentAssignment)) { listener.onPartitionsRevoked(currentAssignment); consumer.assign(newAssignment); listener.onPartitionsAssigned(newAssignment); } }