1.在kafka最新版kafka_2.12-1.0.0的config文件夹server.properties中可以看到num.partitions=1,这个代表每个topic默认的分区数量。当你创建topic时,如果不指定该topic的partition数量,那么默认就是1个分区。这意味着你的这个topic,最多只能被一个group的一个consumer消费,该group的其他consumer将无法获取到消息,也就是无法通过启动多个consumer进程来并行消费。可以通过在配置kafka时修改该值来设置topic默认的partition数量,视情况来定。

2.kafka的topic如果只有一个group来消费,那就相当于是一个消息队列,一个生产者,一个消费者。要实现如“发布-订阅”这样的功能,可以让多个group来消费同一个topic。

3.对于一个topic,如果被一个group消费,该group中能获得消息的consumer的数量不会超过该topic的partition。就是说某topic有10个partition,你有一个group在消费该topic,那么你最多启动10个consumer实例,再多的consumer将无法获取到任何消息。所以在试图启动多个客户端consumer来批量并行消费某topic时,请先确认该topic下的partition数量要大于等于你的consumer数量。

4.producer在生产消息时可以手工指定写入到哪个partition,如果不指定,producer会根据key来进行路由,如果连key也不指定,系统会根据partition数量进行random nextInt。目的是尽量让消息均匀分散到不同partition。