/// <summary> /// Special source that can use an external `KafkaAsyncConsumer`. This is useful when you have /// a lot of manually assigned topic-partitions and want to keep only one kafka consumer. /// </summary> public static Source <ConsumeResult <K, V>, IControl> PlainExternalSource <K, V>( IActorRef consumer, IManualSubscription subscription, bool autoCreateTopics = false) { return(Source.FromGraph(new ExternalPlainSourceStage <K, V>(consumer, subscription, autoCreateTopics))); }
/// <summary> /// ExternalPlainSourceStage /// </summary> /// <param name="consumer">Externally provided consumer</param> /// <param name="subscription">Manual subscription</param> /// <param name="autoCreateTopics">Flag to mark that the consumer actor uses `auto.create.topics.enable`</param> public ExternalPlainSourceStage(IActorRef consumer, IManualSubscription subscription, bool autoCreateTopics) : base("ExternalPlainSubSource") { Consumer = consumer; Subscription = subscription; AutoCreateTopics = autoCreateTopics; }
public ExternalSingleSourceLogic(SourceShape <TMessage> shape, IActorRef consumerActor, IManualSubscription subscription, Attributes attributes, Func <BaseSingleSourceLogic <K, V, TMessage>, IMessageBuilder <K, V, TMessage> > messageBuilderFactory) : base(shape, attributes, messageBuilderFactory) { _consumerActor = consumerActor; _subscription = subscription; }
/// <summary> /// ExternalCommittableSourceStage /// </summary> public ExternalCommittableSourceStage(IActorRef consumer, string groupId, TimeSpan commitTimeout, IManualSubscription subscription) : base("ExternalCommittableSource") { Consumer = consumer; GroupId = groupId; CommitTimeout = commitTimeout; Subscription = subscription; }
/// <summary> /// Configures manual subscription /// </summary> /// <param name="subscription"></param> protected void ConfigureManualSubscription(IManualSubscription subscription) { switch (subscription) { case Assignment assignment: ConsumerActor.Tell(new KafkaConsumerActorMetadata.Internal.Assign(assignment.TopicPartitions), SourceActor.Ref); TopicPartitions = TopicPartitions.Union(assignment.TopicPartitions); break; case AssignmentWithOffset assignmentWithOffset: ConsumerActor.Tell(new KafkaConsumerActorMetadata.Internal.AssignWithOffset(assignmentWithOffset.TopicPartitions), SourceActor.Ref); TopicPartitions = TopicPartitions.Union(assignmentWithOffset.TopicPartitions.Select(tp => tp.TopicPartition)); break; } }
/// <summary> /// ExternalPlainSourceStage /// </summary> /// <param name="consumer">Externally provided consumer</param> /// <param name="subscription">Manual subscription</param> public ExternalPlainSourceStage(IActorRef consumer, IManualSubscription subscription) : base("ExternalPlainSubSource") { Consumer = consumer; Subscription = subscription; }
/// <summary> /// Special source that can use an external `KafkaAsyncConsumer`. This is useful when you have /// a lot of manually assigned topic-partitions and want to keep only one kafka consumer. /// </summary> public static Source <ConsumeResult <K, V>, IControl> PlainExternalSource <K, V>(IActorRef consumer, IManualSubscription subscription) { return(Source.FromGraph(new ExternalPlainSourceStage <K, V>(consumer, subscription))); }