Kafka虚拟机发送消息,主机接收

简介

Windows环境下,在虚拟机上安装kafka软件(作为服务器),在主机调用代码来测试kafka接收消息。

一、下载安装

具体流程可参考链接: kafka下载安装部署

1. 下载

kafka下载网址
在这里插入图片描述

2. 安装后文件目录

在这里插入图片描述

二、配置 SASL

调整kafka配置文件中的IP(虚拟机IP地址),方便后面连接(主机连接虚拟机的kafka)

1. Kafka 配置 SASL

1.1 虚拟机IP

在cmd中输入

ipconfig

在这里插入图片描述

1.2 kafka_server_jaas.conf

在C:\software\kafka_2.13-3.5.1\config文件夹下,新建 kafka_server_jaas.conf 文件,加入以下配置:

KafkaServer {
 org.apache.kafka.common.security.plain.PlainLoginModule required
 username="admin"
 password="admin"
 user_admin="admin"
 user_producer="producer@123"
 user_consumer="consumer@123";
};
KafkaClient {
 org.apache.kafka.common.security.plain.PlainLoginModule required
 username="admin"
 password="admin";
};

1.3 server. Properties

在C:\software\kafka_2.13-3.5.1\config文件夹下,打开server. Properties 文件,加入以下配置,需根据自己电脑的ip进行更换。

host.name=192.168.10.129
#开启用户名、密码
listeners = SASL_PLAINTEXT://192.168.10.129:9092
# 使用的认证协议 
security.inter.broker.protocol=SASL_PLAINTEXT
#SASL机制 
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
# 完成身份验证的类 
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
#已过期 authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer 
# 如果没有找到ACL(访问控制列表)配置,则允许任何操作。 
allow.everyone.if.no.acl.found=false
#超级管理员权限用户
super.users=User:admin

security.inter.broker.protocol=SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://192.168.10.129:9092

在这里插入图片描述

1.4 kafka-server-start.bat

在C:\software\kafka_2.13-3.5.1\bin\windows文件夹下,打开kafka-server-start.bat 文件,在SetLocal、EndLocal之间加入配置:

set KAFKA_OPTS=-Djava.security.auth.login.config=C:/software/kafka_2.13-3.5.1/config/kafka-server-jaas.conf

需根据实际kafka安装目录进行调整。
在这里插入图片描述

2. ZooKeeper 配置 SASL

2.1 zoo_jaas.conf

在C:\software\kafka_2.13-3.5.1\config文件夹下,新建 zoo_jaas.conf 文件

Server {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="admin"
  password="admin"
  user_admin="admin";
};
2.2 zookeeper.properties

在C:\software\kafka_2.13-3.5.1\config文件夹下,修改zookeeper.properties 文件,加入以下配置

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
zookeeper.sasl.client=true

在这里插入图片描述

2.3 zookeeper-server-start.bat

在C:\software\kafka_2.13-3.5.1\bin\windows文件夹下,打开zookeeper-server-start.bat 文件,在SetLocal、EndLocal之间加入配置:

set KAFKA_OPTS=-Djava.security.auth.login.config=C:/software/kafka_2.13-3.5.1/config/zoo_jaas.conf

在这里插入图片描述

3. producer 配置 SASL

3.1 producer.properties

在C:\software\kafka_2.13-3.5.1\config文件夹下,修改producer.properties 文件,加入以下配置

sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN

在这里插入图片描述

3.2 consumer.properties

在C:\software\kafka_2.13-3.5.1\config文件夹下,修改consumer.properties 文件,加入以下配置

sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="consumer" password="consumer@123";
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN

在这里插入图片描述

三、运行(启动命令)

打开C:\software\kafka_2.13-3.5.1\bin\windows 在该目录下输入“cmd”

1. 启动zookeeper

zookeeper-server-start.bat …/…/config/zookeeper.properties

在这里插入图片描述

2. 启动kafka

kafka-server-start.bat …/…/config/server.properties

在这里插入图片描述

3. 生产者创建主题

kafka-console-producer.bat --broker-list 192.168.10.129:9092 --topic test1 --producer.config …\config\producer.properties

在这里插入图片描述

四、程序代码

在主机中操作,打开VS2022。

1. 新建项目

在这里插入图片描述

在这里插入图片描述

2. 安装 Confluent.Kafka

在这里插入图片描述

3. 代码

3.1 program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KafkaDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            ConsumerExample consumerExample = new ConsumerExample();
            consumerExample.ConsumerStart();

            Console.ReadKey();
        }
    }
}

3.2 ConsumerExample.cs
using Confluent.Kafka;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KafkaDemo
{
    /// <summary>
    /// 消费者(接收信息)
    /// </summary>
    class ConsumerExample
    {
        public void ConsumerStart()
        {
            try
            {
                var config = new ConsumerConfig
                {
                    BootstrapServers = "192.168.10.129:9092",
                    GroupId = "ConGro1",//消费组ID
                    SaslUsername = "admin",
                    SaslPassword = "admin",
                    StatisticsIntervalMs = 5000,//5秒内无数据输出侦听中
                    SessionTimeoutMs = 90000,//90秒
                    AutoOffsetReset = AutoOffsetReset.Earliest,// 从最早的开始消费起
                    AutoCommitIntervalMs = 2000,//提交(写入)消费者offset的频率(以毫秒为单位),从poll(拉)的回话处理时长。
                                                //offset:指的是kafka的topic中的每个消费组消费的下标。一条消息对应一个offset下标,每次消费数据的时候如果提交offset,那么下次消费就会从提交的offset加一那里开始消费。
                    SaslMechanism = SaslMechanism.Plain,//身份验证的 SASL机制
                    SecurityProtocol = SecurityProtocol.SaslPlaintext,//通信协议
                    SocketTimeoutMs = 90000,//网路请求的默认超时
                    SocketKeepaliveEnable = true,//TCP的 SO_KEEPALIVE开启时保持连接检测对方主机是否崩溃,避免(服务器)永远阻塞于TCP连接的输入。
                    EnableAutoCommit = false// 禁止AutoCommit
                };

                //创建消费者
                using (var consumer = new ConsumerBuilder<string, string>(config).Build())
                {
                    consumer.Subscribe("test1");//使用生产者之前创建的主题 test1

                    while (true)
                    {
                        //轮询新消息/事件。阻止直到 consume 结果可用或超时期限已过。
                        var consumeResult = consumer.Consume(TimeSpan.FromSeconds(10 * 1000));
                        if (consumeResult.IsPartitionEOF)
                            continue;
                        Console.WriteLine($"Consumed message '{consumeResult.Value}' at: '{consumeResult.Offset}'.");
                    }

                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

4. 项目的目录

在这里插入图片描述

5. 运行结果

它与虚拟机中的生产者test1主题里的消息一致,测试OK。
在这里插入图片描述

五、参考链接

1、Windows下安装单机Kafka环境及配置SASL身份认证
https://blog.youkuaiyun.com/qq_34324703/article/details/130239713
2、Kafka下载安装
https://www.cnblogs.com/Marydon20170307/p/17933358.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值