/// <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;
            }
        }
Пример #6
0
 /// <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;
 }
Пример #7
0
 /// <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)));
 }