使用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]);
}
}
这样就能动态调整分区消费,在后面处理任务压力大情况进行分布式部署程序。