简介
Windows环境下,在虚拟机上安装kafka软件(作为服务器),在主机调用代码来测试kafka接收消息。
一、下载安装
具体流程可参考链接: kafka下载安装部署
1. 下载
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