0、章节1.2.4 每个分区只能被一个消费者使用。
1、章节1.3.2 多个消费者可以组成一个群组,它们共享一个消息流,并保证整个群组对每个给定的消息只处理一次。
2、章节2.1.3 4、Zookeeper节点数量建议是奇数个,至少3台。如果你有1个包含3个节点的群组,那么它允许1个节点失效;如果群组包含5个节点,那么它允许2个节点失效。由于zk使用了一致性协议,节点过多会降低性能。
3、章节2.3.1 默认情况kafka会自动创建主题,但是最好显示手动创建。
4、章节2.3.2 可以增加主题分区的个数,但是不能减少。把分区的大小限制在25GB以内是比较理想的。
5、章节3.4 kafka可以保证同一个分区的消息是有序的。
6、章节 4.1.1 不要让消费者数量超过分区数量。
其他
1、主题名不建议使用"."和"_"字符。
2、建议分区数目是broker节点的整数倍;复制系数(即副本)建议使用默认值3。
3、kafka只保证一个partitions内的消息是有序的,多个一个partitions之间的数据是无序的。
4、默认情况下,Kafka根据传递消息的key来进行分区的分配,即hash(key) % numPartitions。这就保证了相同key的消息一定会被路由到相同的分区。
如果你没有指定key,那么Kafka是如何确定这条消息去往哪个分区的呢?Kafka几乎就是随机找一个分区发送无key的消息,
val index = Utils.abs(Random.nextInt) % availablePartitions.size // 从中随机挑一个