kafka 单节点部署及心得体会

先介绍一下场景吧,我手头有两个项目,两个项目都如其的相似

项目一、类似于怪兽充电的电池物联网节点与云端的数据中心

项目二、汽车分包电池信息物联网设备节点与云数据中心推送

相同点、两个都是基于stream流的数据,而且都是消息上传和控制指令。我前期在项目二中引申了一个物联网单节点项目,也是我现在公司的项目,第一版这是整完了吧,第二版的架构我就开始找方案了(最终的蓝本应该基于云的物联管理平台)。

先初定了一下需求:

  1. 协议兼容http、tcp、udp、websocket
  2. 需要负载均衡
  3. 需要热点部署
  4. 需要消息订阅与推送
  5. 兼容多套解析语言的API
  6. 要求易用性

我默默的放下了手上正在造的C++消息服务器,找到了我一个在某国企的大数据的老伙计,问了相关的技术要点。

现在都流行这么玩:

前端负载均衡+消息队列+后台逻辑

然后就找到了 nginx + kafka + C++ 这条路(更早之前我想的 mqtt 协议 nginx+EMQ)协议mqtt。觉得不妥。协议定死了后面怎么办,再整一套?显然陷入不必要的开发。

kafka

引入一篇文章 https://www.cnblogs.com/ken-io/p/kafka-cluster-deploy-guide.html 

里面定义的概念先看一下

概念/对象简单说明
BrokerKafka节点
Topic主题,用来承载消息
Partition分区,用于主题分片存储
Producer生产者,向主题发布消息的应用
Consumer消费者,从主题订阅消息的应用
Consumer Group消费者组,由多个消费者组成

原文内容:在Kafka集群(Cluster)中,一个Kafka节点就是一个Broker,消息由Topic来承载,可以存储在1个或多个Partition中。发布消息的应用为Producer、消费消息的应用为Consumer,多个Consumer可以促成Consumer Group共同消费一个Topic中的消息。

有了这个概念不妨先把kafka整个集群看成水管,我不管这个节点是一个还是多个。我只关心我的出水口和出水口。也就是概念所说的Producer(生产者)与 Consumer(消费者)。

安装kafka

下载Kafka源码 https://kafka.apache.org/downloads  我的版本2.6.0

下载zookeeper https://zookeeper.apache.org/releases.html 我的版本 3.4.5

zookeeper是日志收集系统 kafka会用这个组件

我的系统Centos7-Desktop 自带jbk1.8,如果没有jdk请安装(kafka是scala开发的需要java)

yum install java-1.8.0-openjdk* -y

拷贝kafka和zookeeper到 /usr/local/

更改当前kafka指定的zookeeper位置(/usr/local/zookeeper)

更改kafka服务配置两项listeners

启动kafka

cd /usr/local/kafka
bin/kafka-server-start.sh -daemon config/server.properties

设置日志转发IP和kafka分区(partitions)和主题(topic)

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

--create 新建topic主题
--zookeeper 指定zookeeper日志管理系统 localhost:2181 指定传输地址本地IP:2181
--replication-factor 1 指定当前主题副本量 应当小于等于你的kafka节点
--partitions 1 指定当前主题中有一个分区
--topic test 当前主题名称为test

replication-factor:用来设置主题的副本数。每个主题可以有多个副本,副本位于集群中不同的broker上,也就是说副本的数量不能超过broker的数量,否则创建主题时会失败。(也就是说你的必须小于等于kafka节点数量)这里我单节点所以只有一个副本。

查看当前topic

bin/kafka-topics.sh --list --zookeeper localhost:2181

列出指定主题下所有的topic

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test

开启kafka生产者

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

开启kafaka消费者

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

--bootstrap-server 服务主机master节点及端口号
--topic test 主题test
--from-beginning 从传递的历史消息点开始读取

从生产者发送任意信息消费者接收

给我的感觉吧kafka更像一个封装好的pipe,功能比fileio stdio强大多了,最主要的还是集群式的。消息订阅是多API的(C++、Python、Java)。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值