MASES.KNet
1.2.1
See the version list below for details.
dotnet add package MASES.KNet --version 1.2.1
NuGet\Install-Package MASES.KNet -Version 1.2.1
<PackageReference Include="MASES.KNet" Version="1.2.1" />
paket add MASES.KNet --version 1.2.1
#r "nuget: MASES.KNet, 1.2.1"
// Install MASES.KNet as a Cake Addin #addin nuget:?package=MASES.KNet&version=1.2.1 // Install MASES.KNet as a Cake Tool #tool nuget:?package=MASES.KNet&version=1.2.1
KNet usage
To use KNet classes the developer can write code in .NET using the same classes available in the official Apache Kafka package. If classes or methods are not available yet it is possible to use the approach synthetized in What to do if an API was not yet implemented
Producer example
Below the reader can found two different version of producer examples.
Simple producer
A basic producer can be like the following one:
using MASES.KNet;
using MASES.KNet.Clients.Producer;
using Java.Util;
using System;
namespace MASES.KNetTemplate.KNetProducer
{
class Program
{
const string theServer = "localhost:9092";
const string theTopic = "myTopic";
static string serverToUse = theServer;
static string topicToUse = theTopic;
static void Main(string[] args)
{
var appArgs = KNetCore.ApplicationArgs;
if (appArgs.Length != 0)
{
serverToUse = args[0];
}
Properties props = new Properties();
props.Put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, serverToUse);
props.Put(ProducerConfig.ACKS_CONFIG, "all");
props.Put(ProducerConfig.RETRIES_CONFIG, 0);
props.Put(ProducerConfig.LINGER_MS_CONFIG, 1);
props.Put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
props.Put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
using (KafkaProducer producer = new KafkaProducer(props))
{
int i = 0;
while (!resetEvent.WaitOne(0))
{
var record = new ProducerRecord<string, string>(topicToUse, i.ToString(), i.ToString());
var result = producer.Send(record);
Console.WriteLine($"Producing: {record} with result: {result.Get()}");
producer.Flush();
i++;
}
}
}
}
}
The example above can be found in the templates package. Its behavior is:
- during initialization prepares the properties,
- create a producer using the properties
- create ProducerRecord and send it
- print out the produced data and the resulting RecordMetadata
Producer with Callback
A producer with Callback can be like the following one. In this example the reader can highlight a slightly difference from the corresponding Java code. Surf JVM callbacks to go into detail in the callback management from JVM.
using MASES.KNet;
using MASES.KNet.Clients.Producer;
using Java.Util;
using System;
namespace MASES.KNetTemplate.KNetProducer
{
class Program
{
const string theServer = "localhost:9092";
const string theTopic = "myTopic";
static string serverToUse = theServer;
static string topicToUse = theTopic;
static void Main(string[] args)
{
var appArgs = KNetCore.ApplicationArgs;
if (appArgs.Length != 0)
{
serverToUse = args[0];
}
Properties props = new Properties();
props.Put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, serverToUse);
props.Put(ProducerConfig.ACKS_CONFIG, "all");
props.Put(ProducerConfig.RETRIES_CONFIG, 0);
props.Put(ProducerConfig.LINGER_MS_CONFIG, 1);
props.Put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
props.Put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
using (KafkaProducer producer = new KafkaProducer(props))
{
int i = 0;
using (var callback = new Callback((o1, o2) =>
{
if (o2 != null) Console.WriteLine(o2.ToString());
else Console.WriteLine($"Produced on topic {o1.Topic} at offset {o1.Offset}");
}))
{
while (!resetEvent.WaitOne(0))
{
var record = new ProducerRecord<string, string>(topicToUse, i.ToString(), i.ToString());
var result = producer.Send(record, callback);
Console.WriteLine($"Producing: {record} with result: {result.Get()}");
producer.Flush();
i++;
}
}
}
}
}
}
The example above can be found in the templates package. Its behavior is:
- during initialization prepares the properties
- create a producer using the properties
- create ProducerRecord and send it using the API Send with the attached Callback
- when the operation completed the Callback is called:
- if an Exception was raised it will be printed out
- otherwise the RecordMetadata is printed out
- print out the produced data and the resulting RecordMetadata
Consumer example
A basic consumer can be like the following one:
using MASES.KNet;
using MASES.KNet.Clients.Consumer;
using Java.Util;
using System;
namespace MASES.KNetTemplate.KNetConsumer
{
class Program
{
const string theServer = "localhost:9092";
const string theTopic = "myTopic";
static string serverToUse = theServer;
static string topicToUse = theTopic;
static void Main(string[] args)
{
var appArgs = KNetCore.ApplicationArgs;
if (appArgs.Length != 0)
{
serverToUse = args[0];
}
Properties props = new Properties();
props.Put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, serverToUse);
props.Put(ConsumerConfig.GROUP_ID_CONFIG, "test");
props.Put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "true");
props.Put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000");
props.Put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
props.Put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
using (var consumer = new KafkaConsumer<string, string>(props))
{
consumer.Subscribe(Collections.singleton(topicToUse));
while (true)
{
var records = consumer.Poll((long)TimeSpan.FromMilliseconds(200).TotalMilliseconds);
foreach (var item in records)
{
Console.WriteLine($"Offset = {item.Offset}, Key = {item.Key}, Value = {item.Value}");
}
}
}
}
}
}
The example above can be found in the templates package. Its behavior is:
- during initialization prepares the properties,
- create a consumer using the properties
- subscribe and starts consume
- when data are received it logs to the console the information.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.1 is compatible. |
.NET Framework | net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
-
.NETCoreApp 3.1
- MASES.CLIParser (>= 3.0.0)
- MASES.JNet (>= 1.3.0)
-
.NETFramework 4.6.1
- MASES.CLIParser (>= 3.0.0)
- MASES.JNet (>= 1.3.0)
-
net5.0
- MASES.CLIParser (>= 3.0.0)
- MASES.JNet (>= 1.3.0)
-
net6.0
- MASES.CLIParser (>= 3.0.0)
- MASES.JNet (>= 1.3.0)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on MASES.KNet:
Package | Downloads |
---|---|
MASES.EntityFrameworkCore.KNet.Serialization
EntityFrameworkCore KNet - Serialization support for EntityFrameworkCore provider for Apache Kafka |
|
MASES.KNet.Serialization.Avro
Avro Serializer/Deserializer of .NET suite for Apache Kafka. KNet is a comprehensive .NET suite for Apache Kafka providing all features: Producer, Consumer, Admin, Streams, Connect, backends (ZooKeeper and Kafka). |
|
MASES.KNet.Serialization.Json
Json Serializer/Deserializer of .NET suite for Apache Kafka. KNet is a comprehensive .NET suite for Apache Kafka providing all features: Producer, Consumer, Admin, Streams, Connect, backends (ZooKeeper and Kafka). |
|
MASES.KNet.Serialization.MessagePack
MessagePack Serializer/Deserializer of .NET suite for Apache Kafka. KNet is a comprehensive .NET suite for Apache Kafka providing all features: Producer, Consumer, Admin, Streams, Connect, backends (ZooKeeper and Kafka). |
|
MASES.KNet.Serialization.Protobuf
Protobuf Serializer/Deserializer of .NET suite for Apache Kafka. KNet is a comprehensive .NET suite for Apache Kafka providing all features: Producer, Consumer, Admin, Streams, Connect, backends (ZooKeeper and Kafka). |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2.8.2 | 13,393 | 11/5/2024 |
2.8.1 | 143,883 | 9/20/2024 |
2.8.0 | 41,384 | 8/6/2024 |
2.7.10 | 274 | 11/5/2024 |
2.7.9 | 528 | 9/20/2024 |
2.7.8 | 13,871 | 7/31/2024 |
2.7.7 | 5,799 | 7/30/2024 |
2.7.6 | 270 | 7/29/2024 |
2.7.5 | 32,260 | 7/2/2024 |
2.7.4 | 55,432 | 6/27/2024 |
2.7.3 | 28,166 | 6/24/2024 |
2.7.2 | 41,905 | 5/25/2024 |
2.7.1 | 13,948 | 5/18/2024 |
2.7.0 | 868 | 5/16/2024 |
2.6.7 | 295 | 11/5/2024 |
2.6.6 | 418 | 9/20/2024 |
2.6.5 | 503 | 9/16/2024 |
2.6.4 | 420 | 6/14/2024 |
2.6.3 | 336 | 6/11/2024 |
2.6.2 | 621 | 5/17/2024 |
2.6.1 | 19,145 | 5/3/2024 |
2.6.0 | 139,666 | 3/1/2024 |
2.5.0 | 680 | 2/28/2024 |
2.4.3 | 58,308 | 2/11/2024 |
2.4.2 | 47,379 | 1/27/2024 |
2.4.1 | 11,688 | 1/21/2024 |
2.4.0 | 368 | 1/20/2024 |
2.3.0 | 92,999 | 11/25/2023 |
2.2.0 | 48,498 | 10/19/2023 |
2.1.3 | 26,515 | 10/11/2023 |
2.1.2 | 26,722 | 10/6/2023 |
2.1.1 | 1,410 | 10/5/2023 |
2.1.0 | 977 | 9/27/2023 |
2.0.2 | 135,927 | 8/2/2023 |
2.0.1 | 10,065 | 7/11/2023 |
2.0.0 | 37,407 | 7/8/2023 |
1.5.5 | 32,630 | 7/1/2023 |
1.5.4 | 25,584 | 5/28/2023 |
1.5.3 | 46,241 | 4/16/2023 |
1.5.2 | 33,284 | 4/11/2023 |
1.5.1 | 65,158 | 3/15/2023 |
1.5.0 | 55,790 | 2/9/2023 |
1.4.8 | 143,669 | 11/28/2022 |
1.4.7 | 791 | 11/23/2022 |
1.4.6 | 883 | 11/22/2022 |
1.4.5 | 739 | 11/21/2022 |
1.4.4 | 19,802 | 11/1/2022 |
1.4.3 | 19,968 | 10/21/2022 |
1.4.2 | 880 | 10/17/2022 |
1.4.1 | 1,461 | 10/10/2022 |
1.4.0 | 52,712 | 10/6/2022 |
1.3.6 | 36,934 | 9/19/2022 |
1.3.5 | 54,277 | 9/8/2022 |
1.3.4 | 66,303 | 8/18/2022 |
1.3.3 | 918 | 8/5/2022 |
1.3.2 | 934 | 6/19/2022 |
1.3.1 | 35,613 | 5/23/2022 |
1.2.4 | 1,086 | 5/11/2022 |
1.2.3 | 981 | 5/7/2022 |
1.2.2 | 971 | 5/2/2022 |
1.2.1 | 6,052 | 3/28/2022 |
1.2.0 | 1,556 | 3/20/2022 |