kafka在共享单车项目中的使用

#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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值