KafkaConsumer本身只是轮询Kafka主题中的数据,它不能是有状态的或无状态的。但是,您可以有状态或无状态的应用程序。一些简单的例子是
- 无状态:使用消息并将其放入外部存储
- 有状态:使用消息,定义一个窗口(=时间间隔)并计算每种标识符的消息数量
在有状态(KafkaStreams)应用程序中,实际状态存储在内部状态存储中,例如RocksDB。如果发生重新平衡(或分配了新的分区),则必须先建立此内部状态存储,以使其与该状态“保持最新”,然后才能再次变为有状态。
网络上有很多不错的资料,例如here或here