<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BigData &#8211; nood1es</title>
	<atom:link href="https://yijie.lu/category/research/bigdata/feed/" rel="self" type="application/rss+xml" />
	<link>https://yijie.lu</link>
	<description>Rick&#039;s Blog</description>
	<lastBuildDate>Sun, 03 Sep 2017 09:32:27 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.2.4</generator>

<image>
	<url>https://yijie.lu/wp-content/uploads/2017/05/411.png</url>
	<title>BigData &#8211; nood1es</title>
	<link>https://yijie.lu</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>日志安全分析方案梳理一二</title>
		<link>https://yijie.lu/a-brief-look-at-the-logs-safety-analysis/</link>
				<comments>https://yijie.lu/a-brief-look-at-the-logs-safety-analysis/#respond</comments>
				<pubDate>Sun, 06 Aug 2017 11:53:10 +0000</pubDate>
		<dc:creator><![CDATA[Rick Lu]]></dc:creator>
				<category><![CDATA[BigData]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">https://yijie.lu/?p=98</guid>
				<description><![CDATA[<p>业界方向 随着大数据技术的发展和各类依赖性技术的提高，日志分析系统已经由原来的分散存储、事后追查发展到统一收集 [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://yijie.lu/a-brief-look-at-the-logs-safety-analysis/">日志安全分析方案梳理一二</a> appeared first on <a rel="nofollow" href="https://yijie.lu">nood1es</a>.</p>
]]></description>
								<content:encoded><![CDATA[<h2 class="md-end-block md-heading">业界方向</h2>
<p><span class="md-line md-end-block">随着大数据技术的发展和各类依赖性技术的提高，日志分析系统已经由原来的分散存储、事后追查发展到统一收集、实时搜索和流式处理。</span></p>
<p><span class="md-line md-end-block">就目前而言，ELK在日志收集和查阅上已经占据了优势地位，其他同类型系统如Splunk等所占份额均在萎缩。又基于高可用和性能的需求，引入了KAFKA集群作为消息队列服务。同类型系统还有Flume，此处不对其原理和实现进行分析。</span></p>
<p><span class="md-line md-end-block">在日志分析上，分布式实时流处理已经是趋势，目前业界流行的有Storm、Spark Streaming、Samza、Flink等，份额及综合实力（包括但不限于背后开发商、文档和资料、语言优势、性能）占优的是Storm和Spark Streaming。以下详细针对这两个框架进行阐述：</span></p>
<p><span id="more-98"></span></p>
<h3 class="md-end-block md-heading">Storm</h3>
<blockquote><p><span class="md-line md-end-block">Apache Storm最开始是由Nathan Marz和他的团队于2010年在数据分析公司BackType开发的，后来BackType公司被Twitter收购，接着Twitter开源Storm并在2014年成为Apache顶级项目。毋庸置疑，Storm成为大规模流数据处理的先锋，并逐渐成为工业标准。Storm是原生的流处理系统，提供low-level的API。Storm使用Thrift来定义topology和支持多语言协议，使得我们可以使用大部分编程语言开发，Scala自然包括在内。</span></p></blockquote>
<h4 class="md-end-block md-heading">模式</h4>
<p><span class="md-line md-end-block">原生流 Native stream process ——所有任务，从到达开始，一个接着一个进行处理。</span></p>
<blockquote><p><span class="md-line md-end-block">首先以原生流处理开始，原生流处理的优势在于它的表达方式。数据一旦到达立即处理，这些系统的延迟性远比其它微批处理要好。除了延迟性外，原生流处理的状态操作也容易实现。</span></p>
<p><span class="md-line md-end-block">一般原生流处理系统为了达到低延迟和容错性会花费比较大的成本，因为它需要考虑每条记录。原生流处理的负载均衡也是个问题。比如，我们处理的数据按key分区，如果分区的某个key是资源密集型，那这个分区很容易成为作业的瓶颈。</span></p></blockquote>
<h4 class="md-end-block md-heading">容错</h4>
<p><span class="md-line md-end-block">通过记录每个源数据的跟踪确认消息来容错，性能好，但是需要开发者重复处理数据，类似于三次握手。也因此，在消息传输保障上，只实现了at least once，会存在消息重复。</span></p>
<h4 class="md-end-block md-heading">性能</h4>
<p><span class="md-line md-end-block">毫秒级，容错、状态管理等均会不同程度降低性能。</span></p>
<h4 class="md-end-block md-heading">总结</h4>
<p><span class="md-line md-end-block">任务量不大，速度要求高的实时性项目适合。</span></p>
<h3 class="md-end-block md-heading">Spark Streaming</h3>
<blockquote><p><span class="md-line md-end-block">Spark是非常受欢迎的批处理框架，包含Spark SQL，MLlib和Spark Streaming。Spark的运行时是建立在批处理之上，因此后续加入的Spark Streaming也依赖于批处理，实现了微批处理。接收器把输入数据流分成短小批处理，并以类似Spark作业的方式处理微批处理。Spark Streaming提供高级声明式API（支持Scala，Java和Python）。</span></p></blockquote>
<h4 class="md-end-block md-heading">模式</h4>
<p><span class="md-line md-end-block">微型批处理 Mini-batch steam process ——所有任务，从到达开始，在T时间内到达的任务作为一个集合，批量进行处理。</span></p>
<blockquote><p><span class="md-line md-end-block">微型批处理。将流式计算分解成一系列短小的批处理作业，也不可避免的减弱系统的表达力。像状态管理或者join等操作的实现会变的困难，因为微批处理系统必须操作整个批量数据。并且，batch interval会连接两个不易连接的事情：基础属性和业务逻辑。</span></p>
<p><span class="md-line md-end-block">相反地，微批处理系统的容错性和负载均衡实现起来非常简单，因为微批处理系统仅发送每批数据到一个worker节点上，如果一些数据出错那就使用其它副本。微批处理系统很容易建立在原生流处理系统之上。</span></p></blockquote>
<h4 class="md-end-block md-heading">容错</h4>
<p><span class="md-line md-end-block">由于源数据均是以batch的形式存在，出现错误重新计算即可，同时batch本身唯一且持久，很容易解决问题。也因此，很容易在消息传递保障上实现exactly once。</span></p>
<h4 class="md-end-block md-heading">性能</h4>
<p><span class="md-line md-end-block">秒级，容错、状态管理等均会不同程度降低性能。</span></p>
<h4 class="md-end-block md-heading">总结</h4>
<p><span class="md-line md-end-block">任务量一般，速度要求不高的项目适合。适合Spark技术栈，且比较新。</span></p>
<h2 class="md-end-block md-heading">初步方案</h2>
<h4 class="md-end-block md-heading">总览</h4>
<p><span class="md-line md-end-block">采用ELK+KAFKA+Spark Streaming来实现</span></p>
<p><span class="md-line md-end-block">目前apache官方提供两个版本的Spark Streaming + KAFKA集成环境。分别是spark-streaming-kafka-0-8和 spark-streaming-kafka-0-10 差异如下：</span></p>
<table class="md-table" contenteditable="false">
<thead>
<tr class="md-end-block">
<th></th>
<th><span class="td-span" contenteditable="true"><span class=""><a spellcheck="false" href="https://spark.apache.org/docs/latest/streaming-kafka-0-8-integration.html">spark-streaming-kafka-0-8</a></span></span></th>
<th><span class="td-span" contenteditable="true"><span class=""><a spellcheck="false" href="https://spark.apache.org/docs/latest/streaming-kafka-0-10-integration.html">spark-streaming-kafka-0-10</a></span></span></th>
</tr>
</thead>
<tbody>
<tr class="md-end-block">
<td><span class="td-span" contenteditable="true">Broker Version</span></td>
<td><span class="td-span" contenteditable="true">0.8.2.1 or higher</span></td>
<td><span class="td-span" contenteditable="true">0.10.0 or higher</span></td>
</tr>
<tr class="md-end-block">
<td><span class="td-span" contenteditable="true">Api Stability</span></td>
<td><span class="td-span" contenteditable="true">Stable</span></td>
<td><span class="td-span" contenteditable="true">Experimental</span></td>
</tr>
<tr class="md-end-block">
<td><span class="td-span" contenteditable="true">Language Support</span></td>
<td><span class="td-span" contenteditable="true">Scala, Java, Python</span></td>
<td><span class="td-span" contenteditable="true">Scala, Java</span></td>
</tr>
<tr class="md-end-block">
<td><span class="td-span" contenteditable="true">Receiver DStream（被动模式）</span></td>
<td><span class="td-span" contenteditable="true">Yes</span></td>
<td><span class="td-span" contenteditable="true">No</span></td>
</tr>
<tr class="md-end-block">
<td><span class="td-span" contenteditable="true">Direct DStream（主动模式）</span></td>
<td><span class="td-span" contenteditable="true">Yes</span></td>
<td><span class="td-span" contenteditable="true">Yes</span></td>
</tr>
<tr class="md-end-block">
<td><span class="td-span" contenteditable="true">SSL / TLS Support</span></td>
<td><span class="td-span" contenteditable="true">No</span></td>
<td><span class="td-span" contenteditable="true">Yes</span></td>
</tr>
<tr class="md-end-block">
<td><span class="td-span" contenteditable="true">Offset Commit Api</span></td>
<td><span class="td-span" contenteditable="true">No</span></td>
<td><span class="td-span" contenteditable="true">Yes</span></td>
</tr>
<tr class="md-end-block">
<td><span class="td-span" contenteditable="true">Dynamic Topic Subscription</span></td>
<td><span class="td-span" contenteditable="true">No</span></td>
<td><span class="td-span" contenteditable="true">Yes</span></td>
</tr>
</tbody>
</table>
<h4 class="md-end-block md-heading">模式</h4>
<h5 class="md-end-block md-heading">被动模式 Receiver-based Approach</h5>
<p><span class="md-line md-end-block">是利用 Kafka 消费者高级 API 在 Spark 的工作节点上创建消费者线程，订阅 Kafka 中的消息，数据会传输到 Spark 工作节点的执行器中，但是默认配置下这种方法在 Spark Job 出错时会导致数据丢失，如果要保证数据可靠性，需要在 Spark Streaming 中开启<span class=""><em>Write Ahead Logs（WAL）</em></span>，也就是上文提到的 Kafka 用来保证数据可靠性和一致性的数据保存方式。可以选择让 Spark 程序把 WAL 保存在分布式文件系统（比如 HDFS）中。</span></p>
<h5 class="md-end-block md-heading">主动模式 Direct Approach</h5>
<p><span class="md-line md-end-block">不需要建立消费者线程，使用 createDirectStream 接口直接去读取 Kafka 的 WAL，将 Kafka 分区与 RDD 分区做一对一映射，相较于第一种方法，不需再维护一份 WAL 数据，提高了性能。读取数据的偏移量由 Spark Streaming 程序通过检查点机制自身处理，避免在程序出错的情况下重现第一种方法重复读取数据的情况，消除了 Spark Streaming 与 ZooKeeper/Kafka 数据不一致的风险。保证每条消息只会被 Spark Streaming 处理一次。</span></p>
<h4 class="md-end-block md-heading">分析</h4>
<p><span class="md-line md-end-block">通过阅读一些教程和报告，并根据现状，采用0-10版本比较好。该版本采用了KAFKA最新的consumer API，可以规避掉KAFKA本身的一些坑。加之我们的业务并不需要追求绝对稳定，保持技术栈的最新有利于解决一些已经暴露出来的坑。不过这个版本也存在一些问题，文档较少、官网原生暂时不支持Python、实验版本API可能修改等。</span></p>
<p><span class="md-line md-end-block">流处理框架选好了，就还有几个问题需要解决。</span></p>
<h4 class="md-end-block md-heading">流程</h4>
<p><span class="md-line md-end-block">源——日志——KAFKA——Spark Streaming——安全策略应用（脚本处理/系统处理）——数据持久化——告警与否——跟进处理</span></p>
<p><span class="md-line md-end-block">（流程图待补）</span></p>
<h2 class="md-end-block md-heading">待处理问题</h2>
<p><span class="md-line md-end-block">针对具体日志的安全策略研究</span></p>
<p><span class="md-line md-end-block">应用策略的Scala程序开发</span></p>
<p><span class="md-line md-end-block">报警消息通知</span></p>
<p><span class="md-line md-end-block">适合具体情景的集群性能指标测试</span></p>
<h2 class="md-end-block md-heading">REFERENCE</h2>
<p>[消息传输保障]: https://kafka.apache.org/documentation/#semantics<br />
[KAFKA和Flume]: https://www.zhihu.com/question/36688175/answers/created<br />
[流处理框架比较]: https://www.zhihu.com/question/29092950/answers/created<br />
[流处理框架比较]: http://www.dataguru.cn/article-9532-1.html<br />
[流处理框架比较]: http://xinhstechblog.blogspot.hk/2014/06/storm-vs-spark-streaming-side-by-side.html<br />
[日志处理平台]: https://www.ibm.com/developerworks/cn/analytics/library/ba-1512-elkstack-logprocessing/index.html<br />
[实时数据处理系统]: https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice2/index.html<br />
[ELK+SS]: https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-elk-spark/index.html<br />
[SS Guide]: http://spark.apache.org/docs/latest/streaming-programming-guide.html<br />
[SS+KAFKA Guide]: https://spark.apache.org/docs/latest/streaming-kafka-0-8-integration.html<br />
[SS+KAFKA+PY]: https://www.rittmanmead.com/blog/2017/01/getting-started-with-spark-streaming-with-python-and-kafka/<br />
[SS+KAFKA+Redis]: http://shiyanjun.cn/archives/1097.html<br />
[性能测试]: https://www.iteblog.com/archives/1561.html</p>
<p>The post <a rel="nofollow" href="https://yijie.lu/a-brief-look-at-the-logs-safety-analysis/">日志安全分析方案梳理一二</a> appeared first on <a rel="nofollow" href="https://yijie.lu">nood1es</a>.</p>
]]></content:encoded>
							<wfw:commentRss>https://yijie.lu/a-brief-look-at-the-logs-safety-analysis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
	</channel>
</rss>
