基于NET Core简单操作Kafka

文章目录

  • 安装
    • 安装JDK
    • 安装zookeeper
    • 安装kafka
  • 运行kafka
    • 创建topic
    • 创建生产者
    • 创建消费者
  • NET简单操作kafka
    • 服务端
    • 客户端

安装

windows服务器上安装JDK,kafka以及zookeeper。

安装JDK

JDK下载路径
在这里插入图片描述
安装完成后需要添加以下的环境变量(右键点击“我的电脑” -> “高级系统设置” -> “环境变量” ):
C:\Program Files\Java\jdk-14\bin(你的安装目录)
打开cmd运行 “java -version” 查看当前系统Java的版本,测试是否安装完成。
基于NET Core简单操作Kafka_第1张图片

安装zookeeper

Kafka的运行依赖于Zookeeper,所以在运行Kafka之前我们需要安装并运行Zookeeper
下载zookeeper
主要是下载Bin文件的版本,apache-zookeeper-3.6.0-bin.tar.gz
基于NET Core简单操作Kafka_第2张图片
下载完成解压文件
打开zookeeper-3.4.13\conf,把zoo_sample.cfg重命名成zoo.cfg
从文本编辑器里打开zoo.cfg
把dataDir的值改成“./zookeeper-3.4.13/data”
添加环境变量:
C:\Program Files\apache-zookeeper-3.6.0\bin(你的解压到的目录)
进入目录C:\Program Files\apache-zookeeper-3.6.0\bin,文本编辑zkEnv.cmd,添加JAVA_HOME变量后保存退出。
set JAVA_HOME=C:\Program Files\Java\jdk-14(前面安装JDK的目录)
基于NET Core简单操作Kafka_第3张图片
打开cmd然后执行 zkserver,挂着不要关闭。
基于NET Core简单操作Kafka_第4张图片

安装kafka

下载kafka
基于NET Core简单操作Kafka_第5张图片
解压文件,注意解压的目录不能含有中文和空格
进入kafka的目录config
从文本编辑器里打开 server.properties
把 log.dirs的值改成 “./logs”
打开cmd进入kafka文件目录: cd C:\kafka_2.11-2.4.1(kafka目录)
输入并执行: .\bin\windows\kafka-server-start.bat .\config\server.properties
挂着不要关闭。
基于NET Core简单操作Kafka_第6张图片

运行kafka

创建topic

cmd进入kafka目录,执行以下代码创建一个topic:

kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

基于NET Core简单操作Kafka_第7张图片

创建生产者

cmd进入kafka目录,执行以下代码创建一个producer

kafka-console-producer.bat --broker-list localhost:9092 --topic test

创建消费者

cmd进入kafka目录,执行以下代码创建一个consumer

kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

最后测试如图所示基于NET Core简单操作Kafka_第8张图片

NET简单操作kafka

新建两个项目,一个kafka服务端用于发送消息,一个kafka客户端用于订阅消息
在这里插入图片描述
打开NuGet,搜索安装kafka-net-core

服务端

using KafkaNet;
using KafkaNet.Model;
using KafkaNet.Protocol;
using System;

namespace KafkaServer
{
    class Program
    {
        static void Main(string[] args)
        {
            const string topicName = "test";
            var options = new KafkaOptions(new Uri("http://localhost:9092"));

            //创建一个生产者发消息
            using (var producer = new Producer(new BrokerRouter(options)){  BatchSize = 100, BatchDelayTime = TimeSpan.FromMilliseconds(2000) })
            {
                while (true)
                {
                    var message = Console.ReadLine();
                    if (message == "quit") break;

                    if (!string.IsNullOrEmpty(message))
                    {
                        producer.SendMessageAsync(topicName, new[] { new Message(message) });
                    }
                }
            }
        }
    }
}

客户端

using KafkaNet;
using KafkaNet.Common;
using KafkaNet.Model;
using System;
using System.Threading.Tasks;

namespace KafkaClient
{
    class Program
    {
        static void Main(string[] args)
        {
            const string topicName = "test";
            var options = new KafkaOptions(new Uri("http://localhost:9092"));


            Task.Run(() =>
            {
                //创建一个消费者
                var consumer = new Consumer(new ConsumerOptions(topicName, new BrokerRouter(options)));
                foreach (var data in consumer.Consume())
                {
                    Console.WriteLine("Response: PartitionId={0},Offset={1} :Value={2}", data.Meta.PartitionId, data.Meta.Offset, data.Value.ToUtf8String());
                }
            });

            Console.ReadLine();
        }
    }
}

运行测试结果:
基于NET Core简单操作Kafka_第9张图片

你可能感兴趣的:(kafka,消息队列)