如果我有一个在 kafka 主题上发布事件的应用程序,并且我的消费者需要按照发布的顺序读取数据,那么我的主题只能有一个分区,因为 kafka 保证仅在分区内排序。
但是,我读到 kafka 使用分区来提供可伸缩性,即将主题的分区放置在多个代理上。我还读到,分区本身不能拆分。
由于只能在分区内进行排序,所以可伸缩性对我的应用程序来说是个问题吗?有没有办法解决这个问题还是我对Kafka的理解不对?
想象一下,我的应用程序有数千个消费者(每个都在一个组中,所以每个人都消费已发布的事件)。所有人都需要从具有单个分区的单个主题中读取数据。
编辑:我想到的另一件事是:想象一下该主题有 5 个分区,并且所有消费者仍必须阅读正确的顺序。如果发布者没有指定分区 id 或密钥,那么 kafka 会在 5 个分区上循环发布信息,对吗?
如果所有的消费者都在一个组中并且都订阅了主题,那么每个消费者都会读取所有主题的事件,这意味着他们仍然会得到有序的消息,对吧?