让我们按顺序排列它们:)
1-当生产者正在生成消息时-它会指定要将消息发送到的主题,对吗?它关心分区吗?
默认情况下,生产者不关心分区。您可以选择使用自定义分区程序来获得更好的控制,但这是完全可选的。
2-订户正在运行时-是否指定其组ID,以便它可以成为同一主题或该组消费者感兴趣的多个主题的消费者集群的一部分?
是的,消费者加入(或创建,如果他们是一个人)消费者组来分担负载。同一组中的任何两个消费者都不会收到相同的消息。
3-每个消费者组在代理上都有对应的分区,还是每个消费者都有一个分区?
都不行 在两个条件下,为消费者组中的所有消费者分配了一组分区:同一组中没有两个消费者具有相同的任何分区-总体上为消费者组分配了每个现有分区。
4-代理创建的分区是否对消费者而言无关紧要?
它们不是,但是您可以从3中看到,拥有比现有分区更多的使用者完全是没有用的,因此这是您消耗的最大并行度。
5-由于这是每个分区都有偏移量的队列,使用者是否有责任指定要读取的消息?是否需要保存其状态?
是的,使用者可以为每个分区的每个主题节省偏移量。这完全由Kafka处理,不用担心。
6-从队列中删除消息会怎样?-例如:保留时间为3小时,然后时间过去了,双方如何处理偏移量?
如果使用者曾经请求代理程序上某个分区不可用的偏移量(例如,由于删除),它将进入错误模式,并最终将此分区自身重置为可用的最新消息或最早消息(取决于auto.offset.reset配置值),然后继续工作。