kafka与storm集成

萝らか妹 提交于 2020-02-08 05:22:27

====什么是storm
    Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。
这是管理队列及工作者集群的另一种方式。Storm也可被用于“连续计算”(continuous computation),
对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。 
Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm用于实时处理,就好比 Hadoop 用于批处理。
Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。
更棒的是你可以使用任意编程语言来做开发。

===离线计算
1.离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示
2.代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算、Hive

===流式计算
1.流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示
2.代表技术:Flume实时获取数据、Kafka/metaq实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)。
3.一句话总结:将源源不断产生的数据实时收集并实时计算,尽可能快的得到计算结果

==========storm组件介绍:                                                         
                                                         
---Nimbus:负责资源分配和任务调度。
---Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。
   通过配置文件设置当前supervisor上启动多少个worker。
---Worker:运行具体处理组件逻辑的进程。Worker运行的任务类型只有两种,一种是Spout任务,一种是Bolt任务。
---Executor:Storm 0.8之后,Executor为Worker进程中的具体的物理线程,同一个Spout/Bolt的Task可能会共享一个物理线程,
   一个Executor中只能运行隶属于同一个Spout/Bolt的Task。
---Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,
   不同spout/bolt的task可能会共享一个物理线程,该线程称为executor。

storm grouping:

1.Shuffle Grouping :随机分组,尽量均匀分布到下游Bolt中

将流分组定义为混排。这种混排分组意味着来自Spout的输入将混排,或随机分发给此Bolt中的任务。shuffle grouping对各个task的tuple分配的比较均匀。

2.Fields Grouping :按字段分组,按数据中field值进行分组;相同field值的Tuple被发送到相同的Task

这种grouping机制保证相同field值的tuple会去同一个task,这对于WordCount来说非常关键,如果同一个单词不去同一个task,
那么统计出来的单词次数就不对了。

3.All grouping :广播

广播发送, 对于每一个tuple将会复制到每一个bolt中处理。

4.Global grouping :全局分组,Tuple被分配到一个Bolt中的一个Task,实现事务性的Topology。

Stream中的所有的tuple都会发送给同一个bolt任务处理,所有的tuple将会发送给拥有最小task_id的bolt任务处理。

5.None grouping :不分组

不关注并行处理负载均衡策略时使用该方式,目前等同于shuffle grouping,另外storm将会把bolt任务和他的上游提供数据的任务安排在同一个线程下。

6.Direct grouping :直接分组 指定分组

由tuple的发射单元直接决定tuple将发射给那个bolt,一般情况下是由接收tuple的bolt决定接收哪个bolt发射的Tuple。
这是一种比较特别的分组方法,用这种分组意味着消息的发送者指定由消息接收者的哪个task处理这个消息。 
只有被声明为Direct Stream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。
消息处理者可以通过TopologyContext来获取处理它的消息的taskid (OutputCollector.emit方法也会返回taskid)

===================================================

 

实例:实时分析Top IP

1.任务介绍

电商网站运营中,需要分析网站访问排名前N的IP,主要用来审计是否有异常IP,同时对网站运营情况进行分析。

2.需求分析

  • 如何统计IP
  1. 通过用户点击日志,即可计算
  • 如何分析IP
  1. 分析不同时间段IP的访问量
  2. 分析热门IP

3.思路简介

  1. 数据采集逻辑(ETL)
    1. 用户的访问日志(点击日志)一般存储在日志服务器,需要通过Flume拉取
  2. 点击日志的缓存
    1. 由Flume采集的用户点击日志,缓存到Kafka中
    2. 从flume缓存数据======>https://blog.csdn.net/chengxuxiaobai1108/article/details/104212001
  3. 实时分析Top用户信息
    1. 使用Apache Storm进行实时分析

 

4.用户点击日志介绍

1,201.105.101.102,http://mystore.jsp/?productid=1,2017020020,1,1
user_id   user_ip   url     click_time     action_type      area_id

5.实时分析topIP 数据,基于storm实现。

Java代码略。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!