0%

转换操作

转换操作分为有状态转换和无状态转换

  • 在无状态转换操作中,每个批次的处理不依赖于之前批次的数据
  • 在有状态状态操作中,需要使用之前批次的数据或是中间结果来计算当前批次的数据,有状态操作基于滑动窗口的转化操作和追踪状态变化的转化操作

无状态转换

阅读全文 »

自定义数据源

Spark Streaming 支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等,但是这些并不能满足我们的所有需求,所以spark streaming提供了自定义数据源的功能,只需要继承 Receiver,并实现 onStart、onStop 方法来自定义数据源采集。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 自定义数据源
class MyReceiver() extends Receiver[String](StorageLevel.MEMORY_ONLY){

var isStop : Boolean = false
// 启动时调用,作用是用来读取数据并将数据发送给spark
override def onStart(): Unit = {
new Thread("Socket Receiver") {
override def run() {
while(!isStop){
// 生成字符
val message = new Random().nextPrintableChar().toString

store(message)
Thread.sleep(500)
}

}
}.start()
}


// 停止
override def onStop(): Unit = {
isStop = true

}
}

在使用自定义数据源时,只需要去接收该数据源数据即可

1
2
3
4
5
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkStreaming")
// 第二个参数是采集周期
val streamingContext = new StreamingContext(sparkConf, Seconds(3))

val stream = streamingContext.receiverStream(new MyReceiver)

如何保证消息一致性

消息发送一致性

消息发送一致性是指业务操作成功了,有这个操作产生的消息一定要发送出去,否则就丢失消息了

会出现的问题?

  • 业务操作成功了,但是此时应用宕机,导致消息没有发送出去
  • 业务成功了,消息发送时消息系统挂掉了,导致消息没有发送出去

如何解决?

消息一致性

  1. 业务处理应用首先把消息发送给消息中间件,标记消息的状态为未处理
  2. 消息中间件收到消息,将消息存储在消息存储中,但是不进行消息投递
  3. 消息中间件返回消息入库成功/失败
  4. 业务放收到消息中间件返回结果进行处理
    • 收到的结果为失败,则放弃业务处理
    • 收到的结果为成功则进行业务处理
  5. 业务处理完成后,把结果发送给消息中间件
  6. 消息中间件收到业务处理的结果,根据结果进行处理
    • 如果业务失败,则删除消息存储中的消息
    • 如果业务成功,则将消息存储中的消息状态改为可发送,进行消息投递

消息处理时要进行持久化操作,表示收到消息了,此时就可以恢复给发布者消息已收到,然后在进行业务操作,如果业务操作失败,则进行补偿机制(定时任务),重新执行失败的任务

HBase复杂查询

多条件复杂查询关系型数据库能够很好的支持,但是对于HBase来说,实现起来并不是那么的容易,基本的解决思路就是建立一张二级索引表,将查询条件设计成二级索引表的rowkey,而存储的数据则是数据表的rowkey,这样,就可以一定程度上的实现多个条件的查询。但是二级索引表也会引入一系列的问题,多表的插入将降低数据写入的性能,并且,由于多表之间无事务保障,可能会带来数据一致性的问题

HBase本身能够支持的查询维度有限,难以支持复杂查询,如group by、order by、join等等,这些特点使得它的应用场景受到了限制。可以使用搜索引擎来解决HBase复杂条件组合查询的问题

文件上传攻击与防御

什么是文件上传攻击

在上网的过程中,我们经常会将一些如图片、压缩包之类的文件上传到远端服务器进行保存,文件上传攻击指的是恶意攻击者利用一些站点没有对文件的类型做很好的校验这样的漏洞,上传了可执行的文件或者脚本,并且通过脚本获得服务器上相应的权利,或者是通过诱导外部用户访问或者下载上传的病毒或者木马文件,达到攻击目的

阅读全文 »