Kafka.net使用编程入门(三)

.NET Core + Kafka 开发指南 不同于基于队列和交换器的RabbitMQ,Kafka的存储层是使用分区事务日志来实现的。Kafka中的数据被组织成主题(Topics),这些是生产者发送数据和消费者读取数据的逻辑通道。一个Kafka集群是一个由多个Kafka代理组成的分布式系统,它们协同工作以处理实时流数据的存储和处理。从下面3张架构图中可以看出Kafka Server 实际扮演的是Broker的角色, 一个Kafka Cluster由多个Broker组成, 或者可以说是多个Topic组成。Broker是构成Kafka集群的服务器。 阅读详情

这个世界既不是有钱人的世界,也不是有权人的世界,它是有心人的世界。


一些有用的命令

1.列出主题:kafka-topics.bat --list  --zookeeper localhost:2181

2.描述主题:kafka-topics.bat --describe --zookeeper localhost:2181 --topic [Topic Name]

3.从头读取消息:kafka-console-consumer.bat --zookeeper localhost:2181 --topic [Topic Name] --from-beginning

4.删除主题:E:\WorkSoftWare\kafka2.11\bin\windows>kafka-run-class.bat kafka.admin.TopicCommand --delete --topic test2016 --zookeeper localhost:2181

实体类:

KafkaProducerMessage.cs代码:

  [Table("KafkaProducerMessage")]
    public partial class KafkaProducerMessage
    {
        public int KafkaProducerMessageID { get; set; }

        [Required]
        [StringLength(1000)]
        public string Topic { get; set; }

        [Required]
        public string MessageContent { get; set; }

        public DateTime CreatedAt { get; set; }
    }

KafkaConsumerMessage.cs代码:


    [Table("KafkaConsumerMessage")]
    public partial class KafkaConsumerMessage
    {
        public int KafkaConsumerMessageID { get; set; }

        [Required]
        [StringLength(1000)]
        public string Topic { get; set; }

        public int Partition { get; set; }

        public long Offset { get; set; }

        [Required]
        public string MessageContent { get; set; }

        public DateTime CreatedAt { get; set; }
    }

KafkaProducerMessageArchive.cs代码:


    [Table("KafkaProducerMessageArchive")]
    public partial class KafkaProducerMessageArchive
    {
        public int KafkaProducerMessageArchiveID { get; set; }

        public int KafkaProducerMessageID { get; set; }

        [Required]
        [StringLength(1000)]
        public string Topic { get; set; }

        [Required]
        public string MessageContent { get; set; }

        public DateTime CreatedAt { get; set; }

        public DateTime ArchivedAt { get; set; }
    }

vwMaxOffsetByPartitionAndTopic.cs代码:

    [Table("vwMaxOffsetByPartitionAndTopic")]
    public partial class vwMaxOffsetByPartitionAndTopic
    {
        [Key]
        [Column(Order = 0)]
        [StringLength(1000)]
        public string Topic { get; set; }

        [Key]
        [Column(Order = 1)]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int Partition { get; set; }

        public long? MaxOffset { get; set; }
    }

KafkaConsumerRepository.cs代码:

    public class KafkaConsumerRepository
    {
        private KafkaModel context;

        public KafkaConsumerRepository ()
        {
            this.context = new KafkaModel();
        }

        public List<KafkaConsumerMessage> GetKafkaConsumerMessages()
        {
            return context.KafkaConsumerMessage.ToList();
        }

        public KafkaConsumerMessage GetKafkaConsumerMessageByID(int MessageID)
        {
            return context.KafkaConsumerMessage.Find(MessageID);
        }

        public List<KafkaConsumerMessage> GetKafkaConsumerMessageByTopic(string TopicName)
        {
            return context.KafkaConsumerMessage
                .Where(a => a.Topic == TopicName)
                .ToList();
        }

        public List<vwMaxOffsetByPartitionAndTopic> GetOffsetPositionByTopic(string TopicName)
        {
            return context.vwMaxOffsetByPartitionAndTopic
                .Where(a => a.Topic == TopicName)
                .ToList();
        }

        public void InsertKafkaConsumerMessage(KafkaConsumerMessage Message)
        {
            Console.WriteLine(String.Format("Insert {0}: {1}", Message.KafkaConsumerMessageID.ToString(), Message.MessageContent));
            context.KafkaConsumerMessage.Add(Message);
            context.SaveChanges();

            Console.WriteLine(String.Format("Saved {0}: {1}", Message.KafkaConsumerMessageID.ToString(), Message.MessageContent));
        }

        public void Save()
        {
            context.SaveChanges();
        }

        public void Dispose()
        {
            context.Dispose();
        }
    }

KafkaProducerRepository.cs代码:

  public class KafkaProducerRepository
    {
        private KafkaModel context;
        public KafkaProducerRepository()
        {
            this.context = new KafkaModel();
        }

        public List<KafkaProducerMessage> GetKafkaProducerMessages()
        {
            return context.KafkaProducerMessage.ToList();
        }

        public List<string> GetDistinctTopics()
        {
            return context.KafkaProducerMessage.Select(a => a.Topic)
                .Distinct()
                .ToList();
        }

        public KafkaProducerMessage GetKafkaProducerMessageByMessageID(int MessageID)
        {
            return context.KafkaProducerMessage.Find(MessageID);
        }

        public List<KafkaProducerMessage> GetKafkaProducerMessageByTopic(string TopicName)
        {
           return context.KafkaProducerMessage
                    .Where(a => a.Topic == TopicName)
                    .OrderBy(a => a.KafkaProducerMessageID)
                    .ToList<KafkaProducerMessage>();
        }

        public void InsertKafkaProducerMessage(KafkaProducerMessage Message)
        {
            context.KafkaProducerMessage.Add(Message);
            context.SaveChanges();
        }

        public void ArchiveKafkaProducerMessage(int MessageID)
        {
            KafkaProducerMessage m = context.KafkaProducerMessage.Find(MessageID);
            KafkaProducerMessageArchive archivedMessage = KafkaProducerMessageToKafkaProducerMessageArchive(m);

            using (var dbContextTransaction = context.Database.BeginTransaction())
            {
                try
                {
                    context.KafkaProducerMessageArchive.Add(archivedMessage);
                    context.KafkaProducerMessage.Remove(m);
                    dbContextTransaction.Commit();
                    context.SaveChanges();
                }
                catch (Exception)
                {
                    dbContextTransaction.Rollback();
                    context.SaveChanges();
                }
            }
        }

        public void ArchiveKafkaProducerMessageList(List<KafkaProducerMessage> Messages)
        {
            foreach (KafkaProducerMessage Message in Messages)
            {
                ArchiveKafkaProducerMessage(Message.KafkaProducerMessageID);
            }
        }

        public static KafkaProducerMessageArchive KafkaProducerMessageToKafkaProducerMessageArchive(KafkaProducerMessage Message)
        {
            return new KafkaProducerMessageArchive
            {
                KafkaProducerMessageID = Message.KafkaProducerMessageID,
                MessageContent = Message.MessageContent,
                Topic = Message.Topic,
                CreatedAt = Message.CreatedAt,
                ArchivedAt = DateTime.UtcNow
            };
        }

        public void Save()
        {
            context.SaveChanges();
        }

        public void Dispose()
        {
            context.Dispose();
        }
    }

数据库上下文KafkaModel.cs代码:

   public partial class KafkaModel : DbContext
    {
        public KafkaModel()
            : base("name=KafkaModel")
        {
        }

        public virtual DbSet<KafkaConsumerMessage> KafkaConsumerMessage { get; set; }
        public virtual DbSet<KafkaProducerMessage> KafkaProducerMessage { get; set; }
        public virtual DbSet<KafkaProducerMessageArchive> KafkaProducerMessageArchive { get; set; }
        public virtual DbSet<vwMaxOffsetByPartitionAndTopic> vwMaxOffsetByPartitionAndTopic { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<KafkaConsumerMessage>()
                .Property(e => e.Topic)
                .IsUnicode(false);

            modelBuilder.Entity<KafkaProducerMessage>()
                .Property(e => e.Topic)
                .IsUnicode(false);

            modelBuilder.Entity<KafkaProducerMessageArchive>()
                .Property(e => e.Topic)
                .IsUnicode(false);

            modelBuilder.Entity<vwMaxOffsetByPartitionAndTopic>()
                .Property(e => e.Topic)
                .IsUnicode(false);
        }
    }

Program.cs代码:

class Program
    {
        private static string Topic;
        static void Main(string[] args)
        {
            string invalidArgErrorMessage = "有效的args是:produce或consume";

            if (args.Length < 1)
            {
                throw (new Exception(invalidArgErrorMessage));
            }

            string intent = args[1];

            Topic = ConfigurationManager.AppSettings["Topic"];

            if (String.Equals(intent, "consume", StringComparison.OrdinalIgnoreCase))
            {
                Console.WriteLine("开始消费者服务");
                Consume();
            }
            else if (String.Equals(intent, "produce", StringComparison.OrdinalIgnoreCase))
            {
                Console.WriteLine("开始生产者服务");
                Produce();
            }
            else
            {
                throw (new Exception(invalidArgErrorMessage));
            }
        }

        private static BrokerRouter InitDefaultConfig()
        {
            List<Uri> ZKURIList = new List<Uri>();

            foreach (string s in ConfigurationManager.AppSettings["BrokerList"].Split(','))
            {
                ZKURIList.Add(new Uri(s));
            }

            var Options = new KafkaOptions(ZKURIList.ToArray());
            var Router = new BrokerRouter(Options);
            return Router;
        }

        private static void Consume()
        {
            KafkaConsumerRepository KafkaRepo = new KafkaConsumerRepository();
            bool FromBeginning = Boolean.Parse(ConfigurationManager.AppSettings["FromBeginning"]);

            var Router = InitDefaultConfig();
            var Consumer = new Consumer(new ConsumerOptions(Topic, Router)); 

            //如果我们不想从头开始,使用最新偏移量。
            if (!FromBeginning)
            {
                var MaxOffsetByPartition = KafkaRepo.GetOffsetPositionByTopic(Topic);
                //如果我们得到一个结果使用它,否则默认
                if (MaxOffsetByPartition.Count != 0)
                {
                    List<OffsetPosition> offsets = new List<OffsetPosition>();
                    foreach (var m in MaxOffsetByPartition)
                    {
                        OffsetPosition o = new OffsetPosition(m.Partition, (long)m.MaxOffset + 1);
                        offsets.Add(o);
                    }
                    Consumer.SetOffsetPosition(offsets.ToArray());
                }
                else
                {
                    Consumer.SetOffsetPosition(new OffsetPosition());
                }
            }

            //消耗返回一个阻塞IEnumerable(ie:从没有结束流)
            foreach (var message in Consumer.Consume())
            {
                string MessageContent = Encoding.UTF8.GetString(message.Value);

                Console.WriteLine(String.Format("处理带有内容的消息: {0}", MessageContent));

                KafkaRepo = new KafkaConsumerRepository();

                KafkaConsumerMessage ConsumerMessage = new KafkaConsumerMessage()
                {
                    Topic = Topic,
                    Offset = (int)message.Meta.Offset,
                    Partition = message.Meta.PartitionId,
                    MessageContent = MessageContent,
                    CreatedAt = DateTime.UtcNow
                };

                KafkaRepo.InsertKafkaConsumerMessage(ConsumerMessage);
                KafkaRepo.Dispose();
            }
        }

        private static void Produce()
        {
            KafkaProducerRepository KafkaRepo = new KafkaProducerRepository();

            var Router = InitDefaultConfig();
            var Client = new Producer(Router);

            List<Message> Messages = new List<Message>();

            foreach (KafkaProducerMessage message in KafkaRepo.GetKafkaProducerMessageByTopic(Topic))
            {
                Messages.Add(new Message(message.MessageContent));
                KafkaRepo.ArchiveKafkaProducerMessage(message.KafkaProducerMessageID);
            }

            Client.SendMessageAsync(Topic, Messages).Wait();

            KafkaRepo.Dispose();
        }
    }

App.config内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>
  <appSettings>
    <add key="BrokerList" value="http://localhost:9092"/>
    <add key="Topic" value="test2017"/>
    <add key="FromBeginning" value="true"/>
  </appSettings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb"/>
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="KafkaModel" connectionString="Data Source=.;Initial Catalog=KafkaDemo;User ID=sa;Password=wu199010;multipleactiveresultsets=True;application name=EntityFramework" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri=""/>
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400"/>
      </providers>
    </roleManager>
  </system.web>
</configuration>

sql脚本:

IF NOT EXISTS(SELECT 1 FROM sys.tables WHERE name = 'KafkaConsumerMessage')
BEGIN

    CREATE TABLE [dbo].[KafkaConsumerMessage](
        [KafkaConsumerMessageID] [int] IDENTITY(1,1) NOT NULL,
        [Topic] [varchar](1000) NOT NULL,
        [Partition] [int] NOT NULL,
        [Offset] [bigint] NOT NULL,
        [MessageContent] [nvarchar](max) NOT NULL,
        [CreatedAt] [datetime] NOT NULL,
        CONSTRAINT [PK_Kafka_Consumer_Message_KafkaConsumerMessageID] PRIMARY KEY CLUSTERED ([KafkaConsumerMessageID])
    )
END

GO

IF NOT EXISTS(SELECT 1 FROM sys.tables WHERE name = 'KafkaProducerMessage')
BEGIN
    CREATE TABLE [dbo].[KafkaProducerMessage](
        [KafkaProducerMessageID] [int] IDENTITY(1,1) NOT NULL,
        [Topic] [varchar](1000) NOT NULL,
        [MessageContent] [nvarchar](max) NOT NULL,
        [CreatedAt] [datetime] NOT NULL,
        CONSTRAINT [PK_KafkaProducerMessage_KafkaProducerMessageID] PRIMARY KEY CLUSTERED ([KafkaProducerMessageID])
    )
END

GO

IF NOT EXISTS(SELECT 1 FROM sys.tables WHERE name = 'KafkaProducerMessageArchive')
BEGIN
    CREATE TABLE [dbo].[KafkaProducerMessageArchive](
        [KafkaProducerMessageArchiveID] [int] IDENTITY(1,1) NOT NULL,
        [KafkaProducerMessageID] [int] NOT NULL,
        [Topic] [varchar](1000) NOT NULL,
        [MessageContent] [nvarchar](max) NOT NULL,
        [CreatedAt] [datetime] NOT NULL,
        [ArchivedAt] [datetime] NOT NULL,
        CONSTRAINT [PK_KafkaProducerMessageArchive_KafkaProducerMessageArchiveID] PRIMARY KEY CLUSTERED ([KafkaProducerMessageArchiveID])
    )
END

GO

引用.net kafka 组件:

这里写图片描述


启动zookeeper服务器,kafka服务器

打开一个DOS环境窗口

zkServer

打开第二个DOS窗口

kafka-server-start D:xxxxxxxxx\config\server.properties

结果如图:

手动添加生产者表三条记录:

这里写图片描述
这里写图片描述


这里写图片描述


消费者表

这里写图片描述


这里写图片描述

core net 消费kafka_.NET Core下使用Kafka的方法步骤 安装CentOS安装 kafka下载并解压# 下载,并解压$ wget https://archive.apache.org/dist/kafka/2.1.1/kafka_2.12-2.1.1.tgz$ tar -zxvf kafka_2.12-2.1.1.tgz$ mv kafka_2.12-2.1.1.tgz /data/kafka# 下载 zookeeper,解压$ wget https:/... 阅读详情

相关推荐

别再折腾CUDA了!Win11上VSCode一键配置PyTorch GPU环境(附Anaconda虚拟环境避坑指南)

本文提供Win11系统下使用VSCode和Anaconda一键配置PyTorch GPU环境的详细指南,解决CUDA版本冲突等常见问题。通过conda的原子化依赖解决方案,安装时间从2小时缩短至15分钟,适合深度学习初学者快速搭建开发环境。

weixin_33101399的博客 248

Akka编程入门

Akka编程入门手册

weixin_44984664的博客 1733

实战!在 AMD RX 9070 XT (16G) 上使用原生 Windows ROCm 7.1 部署 ComfyUI + Z-Image-Turbo

本文详细介绍了如何在Windows系统下为AMD Radeon RX 9070 XT显卡配置Z-Image-Turbo AI绘图环境。主要内容包括:安装VS Build Tools和最新显卡驱动,配置Conda Python 3.12环境,安装ROCm 7.1.1 SDK及PyTorch适配版本,部署ComfyUI可视化界面。重点解决了AMD显卡在AI绘图中的适配问题,通过--use-split-cross-attention参数优化显存使用,最终成功搭建了可在消费级16G显存设备上运行的AI绘图环境

qq_33614778的博客 4696

【Akka】Akka入门编程实例

引言 这篇文章主要是第一次学习Akka编程,先试试水,探探坑,对Akka和SBT的使用有一个直观的了解,以几个简单的akka编程实例来说明akka的使用。希望在日后的学习和编程中,能有更多自己的体会和经验总结来分享。 Actor模型 Actor实例可以想象成是服务器上的Web服务,你无法控制,只能通过发送消息去请求执行任务或查询信息,而不能直接在Web服务中修改状态或者处理资源。通过发送不可

ichsonx的专栏 699

车辆横向控制MPC实战:从‘老王模型’到CasADi求解的保姆级避坑指南

本文详细解析了车辆横向控制MPC的实战应用,从经典动力学模型选择到CasADi求解器的优化配置,提供了一套完整的避坑指南。重点介绍了车辆动力学模型的验证要点、CasADi环境的高效配置技巧以及MPC问题建模的核心要素,帮助开发者快速实现稳健的横向控制方案。

weixin_42524499的博客 346

手把手教你用ET-BERT预训练模型搞定加密流量分类(附完整代码)

本文详细介绍了如何使用ET-BERT预训练模型实现加密流量分类,包括环境配置、数据预处理、模型微调及优化策略。通过实战代码示例,帮助开发者快速掌握这一技术,提升网络安全领域的加密流量分析能力。

weixin_29166013的博客 494

Akka使用入门

一Akka简单介绍 二Akka简单使用 从创建一个scala项目说起 第一个Akka应用 a 定义一个Actor b 客户端调用向actor发送消息 c Actor的生命周期 dActor编程模型的层次结构 akka的容错机制 akka的远程调用 客户端应用入口 服务端入口 pojo类 客户端配置文件 服务端配置文件 三Spark20为什么放弃Akka 四Akka适用场景 一、Akka简单介绍

dinghuiit的博客 2493

高精度SAR ADC设计实战:从建模到版图的16位1MSPS实现

本文详细介绍了16位1MSPS高精度SAR ADC的设计过程,从建模到版图实现的完整流程。重点探讨了分段电容阵列设计、校准算法实现及版图匹配等关键技术,展示了如何在180nm工艺下实现92.5dB SNDR和109.6dB SFDR的高性能指标。文章特别强调了整数桥接电容设计对提升匹配精度的关键作用,为高精度模数转换器设计提供了实用参考。

weixin_33724046的博客 437

Kafka高级应用

除了正常的消息发送和消费, 在使用Kafka的过程中难免会遇到一些其他高级应用类的需求, 比如消费回溯, 这个可以通过原生Kafka提供的Kafka Consumer.seek() 方法来实现, 然而类似延时队列、消息轨迹等应用需求在原生Kafka中就没有提供了。我们在使用其他消息中间件时, 比如Rabbit MQ,使用到了延时队列、消息轨迹的功能, 如果我们将应用直接切换到Kafka中, 那么只能选择舍弃它们。但这也不是绝对的, 我们可以通过一定的手段来扩展Kafka, 本章讲述的就是如何实现这类扩展的高

通往神秘的道路的专栏 2547

爬虫风控实战:当你的代理IP被数美滑块盯上时,如何优雅破解?

本文深入探讨了爬虫风控对抗中数美滑块验证码的破解与防御策略。通过分析数美滑块的多层防御机制,提出了代理IP池精细化管理、请求特征拟人化改造以及工程化滑块验证解决方案等系统性方法,帮助开发者有效降低验证码触发率,提升爬虫效率。

weixin_27419879的博客 207

博途S7-1500T 使用工艺对象驱动液压轴(含SimaHydTO库)

利用工艺对象控制液压轴位置含PLC控制和仿真程序文档资料下载地址如下:液压比例伺服阀的相关应用知识请参看下面的博客文章:液压位置闭环控制(比例伺服阀应用)_RXXW_Dor的博客-优快云博客。

RXXW_Dor的博客 2900

Kafka.net使用编程入门

最近研究分布式消息队列,分享下! 首先zookeeper 和 kafka 压缩包 解压 并配置好! 我本机zookeeper环境配置如下: D:\Worksoftware\ApacheZookeeper3\conf\zoo.cfg 以下是kafka的配置 D:\Worksoftware\Apachekafka2.11\config\server.properties 我已经加...

weixin_30835649的博客 193

【WorkBuddy专栏52】Codex与WorkBuddy生态适配、用户争夺与未来走向(下)

【WorkBuddy专栏52】Codex与WorkBuddy在中国大陆的发展——生态适配、用户争夺与未来走向(下)

AI人人懂 679

[.Net8] 使用Kafka详细指南

Beauty.Net.Kafka是一款基于Confluent.Kafka封装的.NET客户端库,提供了简洁易用的Kafka集成方案。该库支持单条/批量消息发送、事务消息、消息消费等核心功能,并内置依赖注入支持。通过NuGet安装后,开发者可快速配置Kafka服务,使用IKafkaProducer进行消息生产(支持同步/异步模式),或通过IKafkaConsumer实现消息订阅消费。库还提供手动提交偏移量、消息头支持等高级特性,相比原生API大幅简化了.NET项目中Kafka的集成复杂度。

qq_42012617的博客 1080

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

.NET Core 下使用 Kafka

安装CentOS 安装 kafkaKafka : http://kafka.apache.org/downloadsZooLeeper : https://zookeeper.apach...

阿星Plus 2216

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

core net 消费kafka_Kafka与.net core(三)kafka操作

Kafka与.net core(三)kafka操作发布时间:2019-01-11 07:12,浏览次数:1573, 标签:Kafkanetcore1.Kafka相关知识* Broker:即Kafka的服务器,用户存储消息,Kafa集群中的一台或多台服务器统称为broker。* Message消息:是通信的基本单位,每个 producer 可以向一个 topic(主题)发布一些消息。**Kafka中...

weixin_32998219的博客 625

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Kafka.net使用编程入门(四)

新建一个cmd窗口,zkServer命令启动zookeeper 打开另一个cmd窗口,输入: cd D:\Worksoftware\Apachekafka2.11\bin\windows kafka-server-start D:\Worksoftware\Apachekafka2.11\config\server.properties 删除主题:E:\WorkSoftWare\ka...

a879086的博客 178

core net 消费kafka_.NET Core 下使用 Kafka

原标题:.NET Core 下使用 Kafka安装CentOS 安装 kafkaKafka : http://kafka.apache.org/downloadsZooLeeper : https://zookeeper.apache.org/releases.html下载并解压# 下载,并解压$ wget https://archive.apache.org/dist/kafka/2.1.1/k...

weixin_33508272的博客 340

Confluent Kafka .NET 客户端使用指南

Confluent Kafka .NET 客户端使用指南 1. 项目介绍 Confluent Kafka .NET 客户端是一个高性能、可靠的 .NET 库,用于与 Apache Kafka 和 Confluent Platform 进行交互。该项目是基于 librdkafka 的轻量级封装,librdkafka 是一个经过精细调优的 C 客户端。Confluent Kafka .NET 客户端提...

gitblog_00374的博客 1801

kafka-net 项目推荐

kafka-net 项目推荐 1. 项目基础介绍和主要编程语言 kafka-net 是一个用 C# 编写的 Apache Kafka 客户端库,旨在为 .NET 开发者提供一个原生的 Kafka 客户端实现。该项目基于 Apache Kafka 协议,并参考了 kafka-python 库的设计模式。kafka-net 的目标是为 .NET 开发者提供一个高效、易用的 Kafka 客户端,支持消息...

gitblog_01080的博客 1055
上一篇: Kafka入门经典(官网翻译)
下一篇: Mysql导入数据load data infile用法
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值