Kafka分区及相关的问题挺多的,目前就近期遇到的一些问题做一个总结。
生产者:
创建生产者时默认分区为0,也可以通过手动指定分区
//默认
ProducerRecord<String, String> record = new ProducerRecord<>(topic, key, msg);
//手动指定分区为1
ProducerRecord<String, String> record = new ProducerRecord<>(topic,1, key, msg);
消费者:
消费者可以通过低级api手动拉取指定分区
List<TopicPartition> topicPartitionList= new ArrayList<>();
//手动指定分区为0
topicPartitionList.add(new TopicPartition(consumer_kafka_topic,0));
this.consumer.assign(topicPartitionList);
高级api会自动根据策略选择分区,配置策略如下:
partition.assignment.strategy
partionAssignor根据给定的消费者和主题,决定哪些分区应该被分配给哪个消费者。kafka有两个默认的分配策略。默认策略为Range。
Range;该策略会把主题连续的若干个分区分配给消费者。
RoundRobin:该策略会把主题所有分区逐个分配给消费者。
补充问题(待验证)
1,高级api自动提交后同时消费两个分区会以何种策略消费,如何保证偏移量不出现错误,能在该种情境下手动异步提交偏移量吗。
2,高级api手动选择方式和手动配置策略。
3,同时消费多个topic时的上述问题
其他关于Kafka的内容
Kafka消费者的偏移量和高级/简单消费者https://blog.csdn.net/jyj1100/article/details/81068245
使KafKa每次读取消息到最新发送消息的解决方案https://blog.csdn.net/jyj1100/article/details/81066170