The manual partition assignment logic in ManualPartitionNamed/PatternSubscription is broken. The spout is unable to start. The subscription needs to call onPartitionsAssigned even if the current assignment is null, otherwise it becomes impossible to initialize the spout. The order of KafkaConsumer.assign and the calls to onPartitionsAssigned/Revoked is also wrong. The assignment must happen first, otherwise onPartitionsAssigned will get an IllegalStateException when it tries to call KafkaConsumer.seek on a partition the consumer is not yet assigned.