springboot集成kafka遇到问题

使用springboot进行集成,对kafka变成了注解方式编程,例子如下:

@KafkaListener(id = "test0-5", topicPartitions = {
        @TopicPartition(topic = "${topicName}", partitions = {"0", "1"})}, containerFactory = "kafkaListenerContainerFactory")
public void listen1(ConsumerRecord<String, String> record)  {
    messageProcss(record);
}

如果想要动态改变主题和分区就变得相对麻烦,修改主题可以通过注解参数解决或者使用topicPattern模式进行匹配。

但是修改分区就需要我们通过spel表达式进行

partitions = { "#{'${partition.list}'.split(',')}" })

通过代码表示实现split,even,odd等方法

 public static class SplitParts {

        public static String[] odds(int partitions) {
            return split(partitions, i -> i % 2 == 0);
        }

        public static String[] evens(int partitions) {
            return split(partitions, i -> i % 2 == 1);
        }

        private static String[] split(int partitions, IntPredicate predicate) {
            return IntStream.range(0, partitions)
                    .filter(predicate)
                    .mapToObj(i -> String.valueOf(i))
                    .collect(Collectors.toList())
                    .toArray(new String[0]);
        }

    }

这样就能动态调整分区消费,在后面处理任务压力大情况进行分布式部署程序。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章