#kafka共享单车数据对接
##kafka介绍
Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。
我们先看几个基本的消息系统术语:
- Kafka将消息以topic为单位进行归纳。
- 将向Kafka topic发布消息的程序成为producers.
- 将预订topics并消费消息的程序成为consumer.
- Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker.
- producers通过网络将消息发送到Kafka集群,集群向消费者提供消息,如下图所示:
[外链图片转存失败(img-c2xCwXum-1562566317576)(1.png)]
###Topics和Logs
一个topic是对一组消息的归纳。对每个topic,Kafka 对它的日志进行了分区,如下图所示:
[外链图片转存失败(img-YOKRcI1x-1562566317578)(2.png)]
-
每个分区都由一系列有序的、不可变的消息组成,这些消息被连续的追加到分区中。分区中的每个消息都有一个连续的序列号叫做offset,用来在分区中唯一的标识这个消息。
-
实际上每个consumer唯一需要维护的数据是消息在日志中的位置,也就是offset.这个offset有consumer来维护:一般情况下随着consumer不断的读取消息,这offset的值不断增加,但其实consumer可以以任意的顺序读取消息,比如它可以将offset设置成为一个旧的值来重读之前的消息。
-
以上特点的结合,使Kafka consumers非常的轻量级:它们可以在不对集群和其他consumer造成影响的情况下读取消息。
###Producers
Producer将消息发布到它指定的topic中,并负责决定发布到哪个分区。通常简单的由负载均衡机制随机选择分区,但也可以通过特定的分区函数选择分区。使用的更多的是第二种。
###Consumers
Consumers可以加入一个consumer 组,共同竞争一个topic,topic中的消息将被分发到组中的一个成员中。同一组中的consumer可以在不同的程序中,也可以在不同的机器上。如果所有的consumer都在一个组中,这就成为了传统的队列模式,在各consumer中实现负载均衡。如果所有的consumer都不在不同的组中,这就成为了发布-订阅模式,所有的消息都被分发到所有的consumer中。
[外链图片转存失败(img-BhVBac4t-1562566317578)(3.png)]
由两个机器组成的集群拥有4个分区 (P0-P3) 2个consumer组. A组有两个consumerB组有4个
##共享单车流程图
[外链图片转存失败(img-q7IKZbXz-1562566317580)(4.png)]
子系统从kafka中拿到单车数据后主要做三个事情:
-
根据xy坐标调用gis的服务获取对应单车的区、街道、社区等区域信息
-
根据xy坐标去匹配当前单车系统中的围栏空间信息,进行单车是否在禁停区或限停区围栏的判断,以mysql为例,求xy坐标与geom的交集:
st_intersects(st_geomfromtext(concat('POINT(',coordinate_x,' ',coordinate_y,')')),geom)
-
更新本地单车数据
##kafka部署和命令
kafka需要使用到zookeeper服务,部署kafka前应检查kafka配置是否正确(主要检查zookeeper地址端口,日志地址等)。
###linux环境
-
启动kafka服务
./kafka-server-start.sh kafka配置地址
./kafka-server-start.sh I:\kafka\kafka_2.12-2.2.0\config\server.properties
-
创建topic
./kafka-topics.sh --create --zookeeper zookeeperIP:2181 --replication-factor 副本数量 --partitions 分区数量 --topic topic名称
./kafka-topics.sh --create --zookeeper zookeeperIP:2181 --replication-factor <此处填写副本数量> --partitions <此处填写分区数量> --topic topic_name
-
查看topic列表
./kafka-topics.sh --bootstrap-server kafkaIP:9092 --list
[外链图片转存失败(img-vfChAnee-1562566317581)(5.png)] -
查看group列表
./kafka-consumer-groups.sh --bootstrap-server kafkaIP:9092 --list
[外链图片转存失败(img-K5OJKJ3G-1562566317581)(6.png)] -
查看指定group消费情况
./kafka-consumer-groups.sh --bootstrap-server kafkaIP:9092 --group group_name --describe
[外链图片转存失败(img-Siu32P1N-1562566317583)(7.png)]
###window环境
-
./kafka-server-start.bat I:\kafka\kafka_2.12-2.2.0\config\server.properties
-
./kafka-topics.bat --create --zookeeper zookeeperIP:2181 --replication-factor 1 --partitions 5 --topic topic_name
-
./kafka-topics.bat --bootstrap-server kafkaIP:9092 --list
-
./kafka-consumer-groups.bat --bootstrap-server kafkaIP:9092 --list
-
./kafka-consumer-groups.bat --bootstrap-server kafkaIP:9092 --group group_name --describe