WIndows Kafka服务配置

 

 

安装zookeeper

kafka需要用到zookeeper,所以需要先安装zookeeper(kafka也集成了zookeeper,可以不单独下载)

  1. 到官网下载最新版zookeeper,http://www.apache.org/dyn/closer.cgi/zookeeper/
  2. 解压到指定路径
  3. 复制conf目录下zoo_sample.cfg,粘贴改名为zoo.cfg,修改zoo.cfg中的dataDir的值为你的安装目录,并添加一行dataLogDir,值为你想存放 日志文件的路径
  4. 修改系统环境变量,在Path后添加 安装目录
  5. 运行cmd命令窗口,输入zkServer回车,启动

 

 

 

 

安装kafka

  1. 到官网下载最新版kafka,http://kafka.apache.org/downloads
  2. 解压到指定路径,切记目录不能有空格,不然后面运行服务会【找不到或无法加载主类】的报错
  3. 修改E:\kafka_2.12-0.10.2.0\config目录下的server.properties中 log.dirs的值,该目录是kafka服务的本地存储路径,相关消息、主题之类的持久化存储依赖于此。
  4. 添加系统环境变量,在Path后添加kafka根目录下bin\windows的路径,如:D:\JAVA\kafka_2.11-2.3.0\bin\windows
  5. 如果之前未下载zookeeper,可直接在kafka根目录执行zookeeper-server-start ./config/zookeeper.properties启动zookeeper服务,配置文件日志路径需要调整
  6. 启动kafka,在cmd命令行用cd命令切换到kafka根目录,输入命令
    kafka-server-start .\config\server.properties
    出现started (kafka.server.KafkaServer)字样表示启动成功
  7. 运行cmd命令行,创建一个topic,命令如下:
    kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
  8. 再打开一个cmd,创建一个Producer,命令如下:
    kafka-console-producer.bat --broker-list localhost:9092 --topic test
  9. 再打开一个cmd,创建一个Customer,命令如下:
    kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test
    较早的版本可能是kafka-console-consumer.bat --zookeeper localhost:2181 --topic test
  10. 在Producer窗口下输入信息进行测试 ,每输入一行回车后消息马上就会出现在Customer中,表明kafka已经安装测试成功(注意:jdk32位时会报错)

基于.Net Confluent.Kafka 0.11.6.0的客户端简单收发demo

 

 

public partial class KafkaTastForm : Form
    {

        private Consumer<Ignore, string> consumer;
        private Producer<Null, string> producer;

        int times = 0;
        const int mode = 4;//partition的数量
        public KafkaTastForm()
        {
            InitializeComponent();
        }

        private void KafkaTastForm_Load(object sender, EventArgs e)
        {
            Consumer();
            Produce();

            Thread thread = new Thread(OnReceivedMsg);
            thread.IsBackground = true;
            thread.Start();
        }

        /// <summary>
        /// 消费者
        /// </summary>
        public  void Consumer()
        {
            Dictionary<string, object> config = new Dictionary<string, object>();
            config.Add("group.id", new Guid().ToString());//不可重复
            config.Add("bootstrap.servers", "127.0.0.1:9092");
      
            consumer = new Consumer<Ignore, string>(config, null, new StringDeserializer(Encoding.UTF8));
                 订阅topic
            consumer.Subscribe("test");
                 错误日志监视 
            consumer.OnError += (_, msg) => { Console.WriteLine($"Consumer_Error信息:Code:{msg.Code};Reason:{msg.Reason};IsError:{msg.IsLocalError}"); };
            
        }

        /// <summary>
        /// 生产者
        /// </summary>
        public  void Produce()
        {
            Dictionary<string, object> config = new Dictionary<string, object>();
            config.Add("bootstrap.servers", "127.0.0.1:9092");

            producer = new Producer<Null, string>(config, null, new StringSerializer(Encoding.UTF8));
                // 错误日志监视
            producer.OnError += (_, msg) => { Console.WriteLine($"Producer_Erro信息:Code:{msg.Code};Reason:{msg.Reason};IsError:{msg.IsBrokerError}"); };           
        }

        private void BtnProduce_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(tbTopic.Text))
                return;
            // 异步发送消息到主题
            producer.ProduceAsync(tbTopic.Text, null, tbProducer.Lines.Last(), times%mode);
            times++;
            //  Flush到磁盘
            producer.Flush(TimeSpan.FromSeconds(3));
        }

        private void BtnSubscribe_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(tbTopic.Text))
                return;
            consumer.Unsubscribe();
            consumer.Subscribe(tbTopic.Text);
        }

        private void OnReceivedMsg()
        {
            while (true)
            {

                try
                {
                    Message<Ignore, string> receiveMsg;
                    if (consumer.Consume(out receiveMsg, 1000))
                        Invoke(new Action(()=>{ tbConsumer.AppendText($">>'{receiveMsg.Topic}:{receiveMsg.Value}'."+Environment.NewLine); }));

                }
                catch (Exception e)
                {
                    Console.WriteLine($"Consumer_Error occured: {e.Message}");
                }
            }
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值