使用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]);
}
}
這樣就能動態調整分區消費,在後面處理任務壓力大情況進行分佈式部署程序。