microsoft / CSharpClient-for-Kafka

.Net implementation of the Apache Kafka Protocol that provides basic functionality through Producer/Consumer classes. The project also offers balanced consumer implementation.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Is there any sample to use the producer and custumer

victortony opened this issue · comments

Would you please send me a sample to use the producer and customer? The file named "readme.md" is too simple.
Thank you very much.

const string TopicName = "TestTopic";
const string ClientId = "app";
const string Host = "localhost";
const int PartitionId = 0;

        var brokerConfig = new BrokerConfiguration()
        {
            BrokerId = 0,
            Host = Host,
            Port = 9092,
        };

        var consumerConfig = new ConsumerConfiguration
        {
            GroupId = "1",
            Broker = brokerConfig,
            ZooKeeper = KafkaClientHelperUtils.ToZookeeperConfig("localhost:2181")
        };

        KafkaSimpleManagerConfiguration simpleConfig = new KafkaSimpleManagerConfiguration
        {
            Zookeeper = string.Format("{0}:2181", Host)
        };

        simpleConfig.Verify();

        var producerConfiguration = new ProducerConfiguration(new List<BrokerConfiguration> { brokerConfig })
        {
            ClientId = ClientId,
            ZooKeeper = consumerConfig.ZooKeeper
        };

        var kafkaProducer = new Producer(producerConfiguration);
        var correlationID = 0;

        using (KafkaSimpleManager<string, Message> kafkaSimpleManager = new KafkaSimpleManager<string, Message>(simpleConfig))
        {
            var allPartitions = kafkaSimpleManager.GetTopicPartitionsFromZK(TopicName);
            kafkaSimpleManager.RecreateSyncProducerPoolForMetadata();

            var topicMetadata = kafkaSimpleManager.RefreshMetadata(0, ClientId, correlationID++, TopicName, true);
            var simpleProducerId = kafkaSimpleManager.InitializeProducerPoolForTopic(0, ClientId, correlationID, TopicName, true, new ProducerConfiguration(producerConfiguration), true);
            var simpleProducer = kafkaSimpleManager.GetProducerOfPartition(TopicName, PartitionId, true);
            var consumer = kafkaSimpleManager.GetConsumer(TopicName, PartitionId);

            while (true)
            {
                var batch = "Wiadomosc testowa " + DateTime.UtcNow;
                var data = new ProducerData<string, Message>(TopicName, new Message(System.Text.Encoding.Default.GetBytes(batch)));
                simpleProducer.Send(data);  // Sends data here

                for (var i = 0; i <= topicMetadata.PartitionsMetadata.Max(r => r.PartitionId); i++)
                {
                    long earliest = 0;
                    long latest = 0;

                    kafkaSimpleManager.RefreshAndGetOffset(0, ClientId, correlationID, TopicName, PartitionId, true, out earliest, out latest);
                    var latestOffset = KafkaClientHelperUtils.GetValidStartReadOffset(KafkaOffsetType.Latest, earliest, latest, 100, 1);
                    var consumerData = consumer.FetchAndGetDetail(Host, TopicName, 0, PartitionId, latestOffset, int.MaxValue, 1000, 1000); // read data here
                }
            }
        }