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]);
        }

    }

這樣就能動態調整分區消費,在後面處理任務壓力大情況進行分佈式部署程序。 

 

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