Esempio n. 1
0
    def test_commit_for_times_none(self, mock_kconsumer):
        partition_to_offset = {
            TopicPartition("topic1", 0): None,
            TopicPartition("topic2", 0): None,
        }

        consumer_commit_for_times(mock_kconsumer, partition_to_offset)
        assert mock_kconsumer.commit.call_count == 0
Esempio n. 2
0
    def test_commit_for_times_none(self, mock_kconsumer):
        partition_to_offset = {
            TopicPartition("topic1", 0): None,
            TopicPartition("topic2", 0): None,
        }

        consumer_commit_for_times(mock_kconsumer, partition_to_offset)
        assert mock_kconsumer.commit.call_count == 0
Esempio n. 3
0
    def test_commit_for_times_atomic(self, mock_kconsumer):
        partition_to_offset = {
            TopicPartition("topic1", 0): None,
            TopicPartition("topic2", 0): OffsetAndTimestamp(123, 123),
        }

        consumer_commit_for_times(mock_kconsumer, partition_to_offset, atomic=True)
        assert mock_kconsumer.commit.call_count == 0
Esempio n. 4
0
    def test_commit_for_times_atomic(self, mock_kconsumer):
        partition_to_offset = {
            TopicPartition("topic1", 0): None,
            TopicPartition("topic2", 0): OffsetAndTimestamp(123, 123),
        }

        consumer_commit_for_times(mock_kconsumer, partition_to_offset, atomic=True)
        assert mock_kconsumer.commit.call_count == 0
    def run(cls, args, cluster_config):

        if not cls.validate_args(args):
            return

        # Set up the KafkaConsumer
        consumer = KafkaConsumer(
            bootstrap_servers=cluster_config.broker_list,
            client_id="kafka-consumer-manager",
            group_id=args.groupid,
            enable_auto_commit=False,
        )

        tp_timestamps = {}
        # Get topics that the consumer group has committed offsets for in the past
        topics = cls.get_topics_from_consumer_group_id(cluster_config,
                                                       args.groupid)

        if args.timestamp and len(cls.new_offsets_dict) == 0:
            # Committing for using --timestamp for all topics consumer group follows
            if len(topics) == 0:
                return
            partition_to_offset = topic_offsets_for_timestamp(
                consumer, args.timestamp, topics)
            for tp in six.iterkeys(partition_to_offset):
                tp_timestamps[tp] = args.timestamp
        else:
            # Committing via a list of topic.partition=timestamp
            for topic in six.iterkeys(cls.new_offsets_dict):
                for partition in six.iterkeys(cls.new_offsets_dict[topic]):
                    tp_timestamps[TopicPartition(
                        topic,
                        partition)] = cls.new_offsets_dict[topic][partition]
            partition_to_offset = consumer.offsets_for_times(tp_timestamps)

        cls.print_offsets(partition_to_offset, tp_timestamps)

        # Display warning if consumer is attempting to commit offsets for a topic they
        # have never committed offsets for.
        for tp in six.iterkeys(partition_to_offset):
            if tp.topic not in topics:
                print(
                    "WARNING: Consumer group {cg} has never committed offsets for topic {topic}."
                    .format(
                        cg=args.groupid,
                        topic=tp.topic,
                    ))

        if cls.prompt_user():
            consumer_commit_for_times(consumer,
                                      partition_to_offset,
                                      atomic=args.atomic)
        else:
            print("Offsets not committed")
Esempio n. 6
0
    def test_commit_for_times(self, mock_kconsumer):
        timestamp = 123
        topics = ["topic1", "topic2", "topic3"]
        parts = [0, 1]

        partition_to_offset = {
            TopicPartition(topic, part): OffsetAndTimestamp(42, timestamp)
            for topic in topics for part in parts
        }

        expected = {
            TopicPartition(topic, part): OffsetAndMetadata(42, metadata=None)
            for topic in topics for part in parts
        }

        consumer_commit_for_times(mock_kconsumer, partition_to_offset)

        mock_kconsumer.commit.assert_called_once_with(expected)
Esempio n. 7
0
    def test_commit_for_times(self, mock_kconsumer):
        timestamp = 123
        topics = ["topic1", "topic2", "topic3"]
        parts = [0, 1]

        partition_to_offset = {
            TopicPartition(topic, part): OffsetAndTimestamp(42, timestamp)
            for topic in topics for part in parts
        }

        expected = {
            TopicPartition(topic, part): OffsetAndMetadata(42, metadata=None)
            for topic in topics for part in parts
        }

        consumer_commit_for_times(mock_kconsumer, partition_to_offset)

        mock_kconsumer.commit.assert_called_once_with(expected)