You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by yu...@apache.org on 2017/07/14 08:18:17 UTC

[1/4] incubator-rocketmq-site git commit: Post a blog about configurations of jvm and linux kernel.

Repository: incubator-rocketmq-site
Updated Branches:
  refs/heads/asf-site 75a7085f3 -> e3cf6d7af


Post a blog about configurations of jvm and linux kernel.


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/commit/f36d6170
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/tree/f36d6170
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/diff/f36d6170

Branch: refs/heads/asf-site
Commit: f36d6170b8597b178cc72b1409e143aecc490fa4
Parents: 75a7085
Author: yukon <yu...@apache.org>
Authored: Fri Jul 14 16:05:26 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Fri Jul 14 16:05:59 2017 +0800

----------------------------------------------------------------------
 ...7-07-14-rmq-jvm-linuxkernel-configuration.md | 78 ++++++++++++++++++++
 1 file changed, 78 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/f36d6170/_posts/2017-07-14-rmq-jvm-linuxkernel-configuration.md
----------------------------------------------------------------------
diff --git a/_posts/2017-07-14-rmq-jvm-linuxkernel-configuration.md b/_posts/2017-07-14-rmq-jvm-linuxkernel-configuration.md
new file mode 100644
index 0000000..8f8f4a0
--- /dev/null
+++ b/_posts/2017-07-14-rmq-jvm-linuxkernel-configuration.md
@@ -0,0 +1,78 @@
+---
+title: "RocketMQ JVM/Linux Configuration"
+categories:
+  - RocketMQ
+tags:
+  - RocketMQ
+  - Operations
+  - Configuration
+---
+
+This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about before deploying RocketMQ cluster.
+
+{% include toc %}
+
+# JVM Options
+
+The latest released version of JDK 1.8 is recommended, with server compiler and a 8g heap. Set the same Xms and Xmx value to prevent the JVM from resizing the heap for better performance. A simple JVM configurations looks like this: 
+
+```
+-server -Xms8g -Xmx8g -Xmn4g
+```
+
+If you don't care about the boot time of RocketMQ broker, pre-touch the Java heap to make sure that every page will be allocated during JVM initialization is a better choice. Those who don't care about the boot time can enable it:
+
+```
+-XX:+AlwaysPreTouch
+```
+
+Disable biased locking may reduce JVM pauses: 
+
+```
+-XX:-UseBiasedLocking
+```
+
+As for garbage collection, G1 collector with JDK 1.8 is recommended:
+
+```
+-XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30
+```
+
+These GC options looks a little aggressive, but it's proved to have good performance in our production environment.
+
+Don't set a too small value for `-XX:MaxGCPauseMillis`, otherwise JVM will use a small young generation to achieve this goal which will cause very frequent minor GC.
+
+And use rolling GC log file is recommended:
+
+```
+-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m
+```
+
+If write GC file will increase latency of broker, consider redirect GC log file to a memory file system:
+
+```
+-Xloggc:/dev/shm/mq_gc_%p.log
+```
+
+# Linux Kernel Parameters
+
+There is a `os.sh` script that lists a lot of kernel parameters in folder `bin` which can be used for production use with minor changes. Below parameters need attention, and more details please refer to documentation for /proc/sys/vm/*[1].
+
+**vm.extra_free_kbytes**, tells the VM to keep extra free memory between the threshold where background reclaim (kswapd) kicks in, and the threshold where direct reclaim (by allocating processes) kicks in. RocketMQ uses this parameter to avoid high latency in memory allocation.
+
+**vm.min_free_kbytes**, if you set this to lower than 1024KB, your system will
+become subtly broken, and prone to deadlock under high loads. 
+
+**vm.max_map_count**, limits the maximum number of memory map areas a process
+may have. RocketMQ will use mmap to load CommitLog and ConsumeQueue, so set a bigger value for this parameter is recommended.
+
+**vm.swappiness**, define how aggressive the kernel will swap memory pages. Higher values will increase agressiveness, lower values decrease the amount of swap. 10 for this value to avoid swap latency is recommended.
+
+**File descriptor limits**, RocketMQ needs open file descriptors for files(CommitLog and ConsumeQueue) and network connections. We recommend set 655350 for file descriptors.
+
+**Disk scheduler**, the deadline I/O scheduler is recommended for RocketMQ, which attempts to provide a guaranteed latency for requests[2].
+
+
+# Reference
+1. https://www.kernel.org/doc/Documentation/sysctl/vm.txt
+2. https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/ch06s04s02.html
\ No newline at end of file


[2/4] incubator-rocketmq-site git commit: Release at 2017.07.14

Posted by yu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/rocketmq/rmq-jvm-linuxkernel-configuration/index.html
----------------------------------------------------------------------
diff --git a/content/rocketmq/rmq-jvm-linuxkernel-configuration/index.html b/content/rocketmq/rmq-jvm-linuxkernel-configuration/index.html
new file mode 100644
index 0000000..61609dc
--- /dev/null
+++ b/content/rocketmq/rmq-jvm-linuxkernel-configuration/index.html
@@ -0,0 +1,588 @@
+<!doctype html>
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>RocketMQ JVM/Linux Configuration - Apache RocketMQ</title>
+
+
+
+
+<meta name="description" content="This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about before deploying RocketMQ cluster.">
+
+
+
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache RocketMQ">
+<meta property="og:title" content="RocketMQ JVM/Linux Configuration">
+
+
+
+
+  <meta property="og:description" content="This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about before deploying RocketMQ cluster.">
+
+
+
+  <meta name="twitter:site" content="@ApacheRocketMQ">
+  <meta name="twitter:title" content="RocketMQ JVM/Linux Configuration">
+  <meta name="twitter:description" content="This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about before deploying RocketMQ cluster.">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-07-14T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache RocketMQ",
+      "url" : null,
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="aand0XZkSGsziuC-UPD4ZJniFD0m0JhGx6820y2mAQY" />
+
+
+  <meta name="baidu-site-verification" content="wD06EbDRkQ" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache RocketMQ Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+
+<meta http-equiv="cleartype" content="on">
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+
+<!-- end custom head snippets -->
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+        <button><div class="navicon"></div></button>
+        <ul class="visible-links">
+          <li class="masthead__menu-item masthead__menu-item--lg"><a href="/">Apache RocketMQ</a></li>
+          
+            
+            <li class="masthead__menu-item"><a href="/docs/quick-start/">Documentation</a></li>
+          
+            
+            <li class="masthead__menu-item"><a href="/year-archive/">Blog</a></li>
+          
+            
+            <li class="masthead__menu-item"><a href="/community/">Community</a></li>
+          
+            
+            <li class="masthead__menu-item"><a href="/customer/">Customer</a></li>
+          
+            
+            <li class="masthead__menu-item"><a href="/about/team/">About</a></li>
+          
+        </ul>
+        <ul class="hidden-links hidden"></ul>
+      </nav>
+    </div>
+  </div>
+</div>
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+    <div class="author__avatar">
+      
+        <img src="/assets/images/rmq-logo.png" class="author__avatar" alt="" itemprop="image">
+      
+    </div>
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name"></h3>
+    
+      <p class="author__bio" itemprop="description">
+        An open source distributed messaging and streaming data platform.
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+        <li itemprop="homeLocation" itemscope itemtype="http://schema.org/Place">
+          <i class="fa fa-fw fa-map-marker" aria-hidden="true"></i> <span itemprop="name">Hangzhou, China</span>
+        </li>
+      
+
+      
+        <li>
+          <a href="http://incubator.staging.apache.org/projects/rocketmq.html" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:dev@rocketmq.incubator.apache.org">
+            <meta itemprop="email" content="dev@rocketmq.incubator.apache.org" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/ApacheRocketMQ" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+        <li>
+          <a href="https://github.com/apache/incubator-rocketmq" itemprop="sameAs">
+            <i class="fa fa-fw fa-github" aria-hidden="true"></i> GitHub
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="https://www.stackoverflow.com/questions/tagged/rocketmq" itemprop="sameAs">
+            <i class="fa fa-fw fa-stack-overflow" aria-hidden="true"></i> Stackoverflow
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="https://www.quora.com/topic/RocketMQ" itemprop="sameAs">
+            <i class="fa fa-fw" aria-hidden="true"><strong>Q</strong></i> Quora
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="RocketMQ JVM/Linux Configuration">
+    <meta itemprop="description" content="This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about before deploying RocketMQ cluster.">
+    <meta itemprop="datePublished" content="July 14, 2017">
+    
+
+    <div class="page__inner-wrap">
+      
+        <header>
+          <h1 class="page__title" itemprop="headline">RocketMQ JVM/Linux Configuration
+</h1>
+          
+            <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+</p>
+          
+        </header>
+      
+
+      <section class="page__content" itemprop="text">
+        <p>This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about before deploying RocketMQ cluster.</p>
+
+<aside class="sidebar__right">
+<nav class="toc">
+    <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header>
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#jvm-options" id="markdown-toc-jvm-options">JVM Options</a></li>
+  <li><a href="#linux-kernel-parameters" id="markdown-toc-linux-kernel-parameters">Linux Kernel Parameters</a></li>
+  <li><a href="#reference" id="markdown-toc-reference">Reference</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h1 id="jvm-options">JVM Options</h1>
+
+<p>The latest released version of JDK 1.8 is recommended, with server compiler and a 8g heap. Set the same Xms and Xmx value to prevent the JVM from resizing the heap for better performance. A simple JVM configurations looks like this:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>-server -Xms8g -Xmx8g -Xmn4g
+</code></pre>
+</div>
+
+<p>If you don’t care about the boot time of RocketMQ broker, pre-touch the Java heap to make sure that every page will be allocated during JVM initialization is a better choice. Those who don’t care about the boot time can enable it:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>-XX:+AlwaysPreTouch
+</code></pre>
+</div>
+
+<p>Disable biased locking may reduce JVM pauses:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>-XX:-UseBiasedLocking
+</code></pre>
+</div>
+
+<p>As for garbage collection, G1 collector with JDK 1.8 is recommended:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>-XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30
+</code></pre>
+</div>
+
+<p>These GC options looks a little aggressive, but it’s proved to have good performance in our production environment.</p>
+
+<p>Don’t set a too small value for <code class="highlighter-rouge">-XX:MaxGCPauseMillis</code>, otherwise JVM will use a small young generation to achieve this goal which will cause very frequent minor GC.</p>
+
+<p>And use rolling GC log file is recommended:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m
+</code></pre>
+</div>
+
+<p>If write GC file will increase latency of broker, consider redirect GC log file to a memory file system:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>-Xloggc:/dev/shm/mq_gc_%p.log
+</code></pre>
+</div>
+
+<h1 id="linux-kernel-parameters">Linux Kernel Parameters</h1>
+
+<p>There is a <code class="highlighter-rouge">os.sh</code> script that lists a lot of kernel parameters in folder <code class="highlighter-rouge">bin</code> which can be used for production use with minor changes. Below parameters need attention, and more details please refer to documentation for /proc/sys/vm/*[1].</p>
+
+<p><strong>vm.extra_free_kbytes</strong>, tells the VM to keep extra free memory between the threshold where background reclaim (kswapd) kicks in, and the threshold where direct reclaim (by allocating processes) kicks in. RocketMQ uses this parameter to avoid high latency in memory allocation.</p>
+
+<p><strong>vm.min_free_kbytes</strong>, if you set this to lower than 1024KB, your system will
+become subtly broken, and prone to deadlock under high loads.</p>
+
+<p><strong>vm.max_map_count</strong>, limits the maximum number of memory map areas a process
+may have. RocketMQ will use mmap to load CommitLog and ConsumeQueue, so set a bigger value for this parameter is recommended.</p>
+
+<p><strong>vm.swappiness</strong>, define how aggressive the kernel will swap memory pages. Higher values will increase agressiveness, lower values decrease the amount of swap. 10 for this value to avoid swap latency is recommended.</p>
+
+<p><strong>File descriptor limits</strong>, RocketMQ needs open file descriptors for files(CommitLog and ConsumeQueue) and network connections. We recommend set 655350 for file descriptors.</p>
+
+<p><strong>Disk scheduler</strong>, the deadline I/O scheduler is recommended for RocketMQ, which attempts to provide a guaranteed latency for requests[2].</p>
+
+<h1 id="reference">Reference</h1>
+<ol>
+  <li>https://www.kernel.org/doc/Documentation/sysctl/vm.txt</li>
+  <li>https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/ch06s04s02.html</li>
+</ol>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#configuration" class="page__taxonomy-item" rel="tag">Configuration</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#operations" class="page__taxonomy-item" rel="tag">Operations</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#rocketmq" class="page__taxonomy-item" rel="tag">RocketMQ</a>
+    
+    </span>
+  </p>
+
+
+
+
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-folder-open" aria-hidden="true"></i> Categories: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/categories/#rocketmq" class="page__taxonomy-item" rel="tag">RocketMQ</a>
+    
+    </span>
+  </p>
+
+
+        
+          <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-07-14T00:00:00+08:00">July 14, 2017</time></p>
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ApacheRocketMQ&text=RocketMQ JVM/Linux Configuration /rocketmq/rmq-jvm-linuxkernel-configuration/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/rocketmq/rmq-jvm-linuxkernel-configuration/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/rocketmq/rmq-jvm-linuxkernel-configuration/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/rocketmq/rmq-jvm-linuxkernel-configuration/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/rocketmq/Field-Report-Meetup-Beijing/" class="pagination--pager" title="Field Report of Apache RocketMQ Meetup Beijing
+">Previous</a>
+    
+    
+      <a href="#" class="pagination--pager disabled">Next</a>
+    
+  </nav>
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <h4 class="page__comments-title">Leave a Comment</h4>
+    <section id="disqus_thread"></section>
+  
+</div>
+    
+  </article>
+
+  
+  
+</div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <style type="text/css">
+  div.columns   { float: left; margin-left: 10px;}
+  div.clear     { clear: both; } 
+</style>
+<div>
+  <div class="columns">
+    <a href="https://www.apache.org/"><img src="/assets/images/feather-small.gif" alt="Apache Software Foundation" style="height: 88px !important" /></a>
+  </div>
+  <div class="columns" style="width: 80%">
+    <div class="page__footer-follow">
+      <ul class="social-icons">
+        
+          <li><strong>Follow:</strong></li>
+        
+        
+          <li><a href="https://twitter.com/ApacheRocketMQ"><i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter</a></li>
+        
+        
+        
+          <li><a href="http://github.com/apache/incubator-rocketmq"><i class="fa fa-fw fa-github" aria-hidden="true"></i> GitHub</a></li>
+        
+        
+        <li><a href="/feed.xml"><i class="fa fa-fw fa-rss-square" aria-hidden="true"></i> Feed</a></li>
+      </ul>
+    </div>
+
+    <div class="page__footer-copyright">Copyright &copy; 2017 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All Rights Reserved.</div>
+  </div>
+</div>
+<div class="clear"></div>
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-89603173-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+<script>
+var _hmt = _hmt || [];
+(function() {
+  var hm = document.createElement("script");
+  hm.src = "https://hm.baidu.com/hm.js?36428f2b841d08e7405724cbf7f860d2";
+  var s = document.getElementsByTagName("script")[0]; 
+  s.parentNode.insertBefore(hm, s);
+})();
+</script>
+
+
+
+
+  
+  <script type="text/javascript">
+  	/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
+  	var disqus_shortname = 'rocketmq';
+
+  	/* * * DON'T EDIT BELOW THIS LINE * * */
+  	(function() {
+  		var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+  		dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+  		(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+  	})();
+
+  	/* * * DON'T EDIT BELOW THIS LINE * * */
+  	(function () {
+  		var s = document.createElement('script'); s.async = true;
+  		s.type = 'text/javascript';
+  		s.src = '//' + disqus_shortname + '.disqus.com/count.js';
+  		(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
+  	}());
+  </script>
+  <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/sitemap.xml
----------------------------------------------------------------------
diff --git a/content/sitemap.xml b/content/sitemap.xml
index ea65cdd..86cd295 100644
--- a/content/sitemap.xml
+++ b/content/sitemap.xml
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
 <url>
+<loc>/rocketmq/rmq-jvm-linuxkernel-configuration/</loc>
+<lastmod>2017-07-14T00:00:00+08:00</lastmod>
+</url>
+<url>
 <loc>/rocketmq/Field-Report-Meetup-Beijing/</loc>
 <lastmod>2017-07-02T00:00:00+08:00</lastmod>
 </url>

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/tags/index.html
----------------------------------------------------------------------
diff --git a/content/tags/index.html b/content/tags/index.html
index b3c91ea..b97c282 100644
--- a/content/tags/index.html
+++ b/content/tags/index.html
@@ -391,6 +391,26 @@
 <!-- If not equal to previous then it must be unique as sorted -->
 
 
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
 
 
 
@@ -485,6 +505,12 @@
 <!-- If not equal to previous then it must be unique as sorted -->
 
 
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
 <!-- Push to group_names -->
 
 
@@ -616,6 +642,22 @@
 
 
 
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
 
   
   <h2 id="activity" class="archive__subtitle">Activity</h2>
@@ -776,6 +818,36 @@ January 5th 2017
   
 
   
+  <h2 id="configuration" class="archive__subtitle">Configuration</h2>
+  
+    
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/rocketmq/rmq-jvm-linuxkernel-configuration/" rel="permalink">RocketMQ JVM/Linux Configuration
+</a>
+      
+    </h2>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+</p>
+    
+    <p class="archive__item-excerpt" itemprop="description">This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about befor...</p>
+  </article>
+</div>
+  
+
+  
   <h2 id="dependency" class="archive__subtitle">Dependency</h2>
   
     
@@ -1023,6 +1095,36 @@ and fulfill much of this responsibility through managing...</p>
   
 
   
+  <h2 id="operations" class="archive__subtitle">Operations</h2>
+  
+    
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/rocketmq/rmq-jvm-linuxkernel-configuration/" rel="permalink">RocketMQ JVM/Linux Configuration
+</a>
+      
+    </h2>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+</p>
+    
+    <p class="archive__item-excerpt" itemprop="description">This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about befor...</p>
+  </article>
+</div>
+  
+
+  
   <h2 id="partition" class="archive__subtitle">Partition</h2>
   
     
@@ -1128,6 +1230,32 @@ and fulfill much of this responsibility through managing...</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
+        <a href="/rocketmq/rmq-jvm-linuxkernel-configuration/" rel="permalink">RocketMQ JVM/Linux Configuration
+</a>
+      
+    </h2>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+</p>
+    
+    <p class="archive__item-excerpt" itemprop="description">This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about befor...</p>
+  </article>
+</div>
+  
+    
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
         <a href="/rocketmq/filter-messages-by-sql92-in-rocketmq/" rel="permalink">Filter Messages By SQL92 In RocketMQ
 </a>
       

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/year-archive/index.html
----------------------------------------------------------------------
diff --git a/content/year-archive/index.html b/content/year-archive/index.html
index 058b076..4102552 100644
--- a/content/year-archive/index.html
+++ b/content/year-archive/index.html
@@ -300,6 +300,34 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
+        <a href="/rocketmq/rmq-jvm-linuxkernel-configuration/" rel="permalink">RocketMQ JVM/Linux Configuration
+</a>
+      
+    </h2>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+</p>
+    
+    <p class="archive__item-excerpt" itemprop="description">This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about befor...</p>
+  </article>
+</div>
+
+  
+  
+  
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
         <a href="/rocketmq/Field-Report-Meetup-Beijing/" rel="permalink">Field Report of Apache RocketMQ Meetup Beijing
 </a>
       


[3/4] incubator-rocketmq-site git commit: Release at 2017.07.14

Posted by yu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/feed.xml
----------------------------------------------------------------------
diff --git a/content/feed.xml b/content/feed.xml
index 6394b89..a9ac736 100644
--- a/content/feed.xml
+++ b/content/feed.xml
@@ -1,4 +1,82 @@
-<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xml" href="/feed.xslt.xml"?><feed xmlns="http://www.w3.org/2005/Atom"><generator uri="http://jekyllrb.com" version="3.3.1">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2017-07-05T11:47:38+08:00</updated><id>//</id><title type="html">Apache RocketMQ</title><subtitle>The homepage of RocketMQ.</subtitle><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;&quot;/assets/images/rmq-logo.png&quot;, &quot;bio&quot;=&gt;&quot;An open source distributed messaging and streaming data platform.&quot;, &quot;location&quot;=&gt;&quot;Hangzhou, China&quot;, &quot;email&quot;=&gt;&quot;dev@rocketmq.incubator.apache.org&quot;, &quot;uri&quot;=&gt;&quot;http://incubator.staging.apache.org/projects/rocketmq.html&quot;, &quot;bitbucket&quot;=&gt;nil, &quot;codepen&quot;=&gt;nil, &quot;dribbble&quot;=&gt;nil, &quot;flickr&quot;=&gt;n
 il, &quot;facebook&quot;=&gt;nil, &quot;foursquare&quot;=&gt;nil, &quot;github&quot;=&gt;&quot;apache/incubator-rocketmq&quot;, &quot;google_plus&quot;=&gt;nil, &quot;keybase&quot;=&gt;nil, &quot;instagram&quot;=&gt;nil, &quot;lastfm&quot;=&gt;nil, &quot;linkedin&quot;=&gt;nil, &quot;pinterest&quot;=&gt;nil, &quot;soundcloud&quot;=&gt;nil, &quot;stackoverflow&quot;=&gt;&quot;questions/tagged/rocketmq&quot;, &quot;steam&quot;=&gt;nil, &quot;tumblr&quot;=&gt;nil, &quot;twitter&quot;=&gt;&quot;ApacheRocketMQ&quot;, &quot;vine&quot;=&gt;nil, &quot;weibo&quot;=&gt;nil, &quot;xing&quot;=&gt;nil, &quot;youtube&quot;=&gt;nil, &quot;quora&quot;=&gt;&quot;topic/RocketMQ&quot;}</name><email>dev@rocketmq.incubator.apache.org</email><uri>http://incubator.staging.apache.org/projects/rocketmq.html</uri></author><entry><title type="html">Field Report of Apache RocketMQ Meetup Beijing</title><link href="/rocketmq/Field-Report-Meetup-Beijing/" rel="alternate" type="text/html" title="Field Report of A
 pache RocketMQ Meetup Beijing" /><published>2017-07-02T00:00:00+08:00</published><updated>2017-07-02T00:00:00+08:00</updated><id>/rocketmq/Field-Report-Meetup-Beijing</id><content type="html" xml:base="/rocketmq/Field-Report-Meetup-Beijing/">&lt;p&gt;In July 1st, Apache RocketMQ community launched a meetup in Beijing with a perfect ending. Thanks for everyone’s participation.&lt;/p&gt;
+<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xml" href="/feed.xslt.xml"?><feed xmlns="http://www.w3.org/2005/Atom"><generator uri="http://jekyllrb.com" version="3.3.1">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2017-07-14T16:07:01+08:00</updated><id>//</id><title type="html">Apache RocketMQ</title><subtitle>The homepage of RocketMQ.</subtitle><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;&quot;/assets/images/rmq-logo.png&quot;, &quot;bio&quot;=&gt;&quot;An open source distributed messaging and streaming data platform.&quot;, &quot;location&quot;=&gt;&quot;Hangzhou, China&quot;, &quot;email&quot;=&gt;&quot;dev@rocketmq.incubator.apache.org&quot;, &quot;uri&quot;=&gt;&quot;http://incubator.staging.apache.org/projects/rocketmq.html&quot;, &quot;bitbucket&quot;=&gt;nil, &quot;codepen&quot;=&gt;nil, &quot;dribbble&quot;=&gt;nil, &quot;flickr&quot;=&gt;n
 il, &quot;facebook&quot;=&gt;nil, &quot;foursquare&quot;=&gt;nil, &quot;github&quot;=&gt;&quot;apache/incubator-rocketmq&quot;, &quot;google_plus&quot;=&gt;nil, &quot;keybase&quot;=&gt;nil, &quot;instagram&quot;=&gt;nil, &quot;lastfm&quot;=&gt;nil, &quot;linkedin&quot;=&gt;nil, &quot;pinterest&quot;=&gt;nil, &quot;soundcloud&quot;=&gt;nil, &quot;stackoverflow&quot;=&gt;&quot;questions/tagged/rocketmq&quot;, &quot;steam&quot;=&gt;nil, &quot;tumblr&quot;=&gt;nil, &quot;twitter&quot;=&gt;&quot;ApacheRocketMQ&quot;, &quot;vine&quot;=&gt;nil, &quot;weibo&quot;=&gt;nil, &quot;xing&quot;=&gt;nil, &quot;youtube&quot;=&gt;nil, &quot;quora&quot;=&gt;&quot;topic/RocketMQ&quot;}</name><email>dev@rocketmq.incubator.apache.org</email><uri>http://incubator.staging.apache.org/projects/rocketmq.html</uri></author><entry><title type="html">RocketMQ JVM/Linux Configuration</title><link href="/rocketmq/rmq-jvm-linuxkernel-configuration/" rel="alternate" type="text/html" title="RocketMQ JVM/Linux Config
 uration" /><published>2017-07-14T00:00:00+08:00</published><updated>2017-07-14T00:00:00+08:00</updated><id>/rocketmq/rmq-jvm-linuxkernel-configuration</id><content type="html" xml:base="/rocketmq/rmq-jvm-linuxkernel-configuration/">&lt;p&gt;This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about before deploying RocketMQ cluster.&lt;/p&gt;
+
+&lt;aside class=&quot;sidebar__right&quot;&gt;
+&lt;nav class=&quot;toc&quot;&gt;
+    &lt;header&gt;&lt;h4 class=&quot;nav__title&quot;&gt;&lt;i class=&quot;fa fa-file-text&quot;&gt;&lt;/i&gt; On This Page&lt;/h4&gt;&lt;/header&gt;
+&lt;ul class=&quot;toc__menu&quot; id=&quot;markdown-toc&quot;&gt;
+  &lt;li&gt;&lt;a href=&quot;#jvm-options&quot; id=&quot;markdown-toc-jvm-options&quot;&gt;JVM Options&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;#linux-kernel-parameters&quot; id=&quot;markdown-toc-linux-kernel-parameters&quot;&gt;Linux Kernel Parameters&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;#reference&quot; id=&quot;markdown-toc-reference&quot;&gt;Reference&lt;/a&gt;&lt;/li&gt;
+&lt;/ul&gt;
+
+  &lt;/nav&gt;
+&lt;/aside&gt;
+
+&lt;h1 id=&quot;jvm-options&quot;&gt;JVM Options&lt;/h1&gt;
+
+&lt;p&gt;The latest released version of JDK 1.8 is recommended, with server compiler and a 8g heap. Set the same Xms and Xmx value to prevent the JVM from resizing the heap for better performance. A simple JVM configurations looks like this:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-server -Xms8g -Xmx8g -Xmn4g
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;If you don’t care about the boot time of RocketMQ broker, pre-touch the Java heap to make sure that every page will be allocated during JVM initialization is a better choice. Those who don’t care about the boot time can enable it:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-XX:+AlwaysPreTouch
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;Disable biased locking may reduce JVM pauses:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-XX:-UseBiasedLocking
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;As for garbage collection, G1 collector with JDK 1.8 is recommended:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;These GC options looks a little aggressive, but it’s proved to have good performance in our production environment.&lt;/p&gt;
+
+&lt;p&gt;Don’t set a too small value for &lt;code class=&quot;highlighter-rouge&quot;&gt;-XX:MaxGCPauseMillis&lt;/code&gt;, otherwise JVM will use a small young generation to achieve this goal which will cause very frequent minor GC.&lt;/p&gt;
+
+&lt;p&gt;And use rolling GC log file is recommended:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;If write GC file will increase latency of broker, consider redirect GC log file to a memory file system:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;-Xloggc:/dev/shm/mq_gc_%p.log
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h1 id=&quot;linux-kernel-parameters&quot;&gt;Linux Kernel Parameters&lt;/h1&gt;
+
+&lt;p&gt;There is a &lt;code class=&quot;highlighter-rouge&quot;&gt;os.sh&lt;/code&gt; script that lists a lot of kernel parameters in folder &lt;code class=&quot;highlighter-rouge&quot;&gt;bin&lt;/code&gt; which can be used for production use with minor changes. Below parameters need attention, and more details please refer to documentation for /proc/sys/vm/*[1].&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;vm.extra_free_kbytes&lt;/strong&gt;, tells the VM to keep extra free memory between the threshold where background reclaim (kswapd) kicks in, and the threshold where direct reclaim (by allocating processes) kicks in. RocketMQ uses this parameter to avoid high latency in memory allocation.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;vm.min_free_kbytes&lt;/strong&gt;, if you set this to lower than 1024KB, your system will
+become subtly broken, and prone to deadlock under high loads.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;vm.max_map_count&lt;/strong&gt;, limits the maximum number of memory map areas a process
+may have. RocketMQ will use mmap to load CommitLog and ConsumeQueue, so set a bigger value for this parameter is recommended.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;vm.swappiness&lt;/strong&gt;, define how aggressive the kernel will swap memory pages. Higher values will increase agressiveness, lower values decrease the amount of swap. 10 for this value to avoid swap latency is recommended.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;File descriptor limits&lt;/strong&gt;, RocketMQ needs open file descriptors for files(CommitLog and ConsumeQueue) and network connections. We recommend set 655350 for file descriptors.&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;Disk scheduler&lt;/strong&gt;, the deadline I/O scheduler is recommended for RocketMQ, which attempts to provide a guaranteed latency for requests[2].&lt;/p&gt;
+
+&lt;h1 id=&quot;reference&quot;&gt;Reference&lt;/h1&gt;
+&lt;ol&gt;
+  &lt;li&gt;https://www.kernel.org/doc/Documentation/sysctl/vm.txt&lt;/li&gt;
+  &lt;li&gt;https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/ch06s04s02.html&lt;/li&gt;
+&lt;/ol&gt;</content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;&quot;/assets/images/rmq-logo.png&quot;, &quot;bio&quot;=&gt;&quot;An open source distributed messaging and streaming data platform.&quot;, &quot;location&quot;=&gt;&quot;Hangzhou, China&quot;, &quot;email&quot;=&gt;&quot;dev@rocketmq.incubator.apache.org&quot;, &quot;uri&quot;=&gt;&quot;http://incubator.staging.apache.org/projects/rocketmq.html&quot;, &quot;bitbucket&quot;=&gt;nil, &quot;codepen&quot;=&gt;nil, &quot;dribbble&quot;=&gt;nil, &quot;flickr&quot;=&gt;nil, &quot;facebook&quot;=&gt;nil, &quot;foursquare&quot;=&gt;nil, &quot;github&quot;=&gt;&quot;apache/incubator-rocketmq&quot;, &quot;google_plus&quot;=&gt;nil, &quot;keybase&quot;=&gt;nil, &quot;instagram&quot;=&gt;nil, &quot;lastfm&quot;=&gt;nil, &quot;linkedin&quot;=&gt;nil, &quot;pinterest&quot;=&gt;nil, &quot;soundcloud&quot;=&gt;nil, &quot;stackoverflow&quot;=&gt;&quot;questions/tagged/rocketmq&quot;, &quot;steam&quot;=&gt;nil, &quot
 ;tumblr&quot;=&gt;nil, &quot;twitter&quot;=&gt;&quot;ApacheRocketMQ&quot;, &quot;vine&quot;=&gt;nil, &quot;weibo&quot;=&gt;nil, &quot;xing&quot;=&gt;nil, &quot;youtube&quot;=&gt;nil, &quot;quora&quot;=&gt;&quot;topic/RocketMQ&quot;}</name><email>dev@rocketmq.incubator.apache.org</email><uri>http://incubator.staging.apache.org/projects/rocketmq.html</uri></author><category term="RocketMQ" /><category term="Operations" /><category term="Configuration" /><summary type="html">This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about before deploying RocketMQ cluster.</summary></entry><entry><title type="html">Field Report of Apache RocketMQ Meetup Beijing</title><link href="/rocketmq/Field-Report-Meetup-Beijing/" rel="alternate" type="text/html" title="Field Report of Apache RocketMQ Meetup Beijing" /><published>2017-07-02T00:00:00+08:00</published><updated>2017-07-02T00:00:00+08:00</updated><i
 d>/rocketmq/Field-Report-Meetup-Beijing</id><content type="html" xml:base="/rocketmq/Field-Report-Meetup-Beijing/">&lt;p&gt;In July 1st, Apache RocketMQ community launched a meetup in Beijing with a perfect ending. Thanks for everyone’s participation.&lt;/p&gt;
 
 &lt;p&gt;It is really appreciated that over 300 RocketMQ or open source enthusiasts gathered in Institute of Software, Chinese Academy of Sciences, to attend this meetup in such a hot summer day.
 &lt;img src=&quot;/assets/images/blog/meetup_beijing_group.jpg&quot; alt=&quot;meetup_beijing_group&quot; /&gt;&lt;/p&gt;
@@ -635,284 +713,4 @@ and fulfill much of this responsibility through managing topic route information
   &lt;li&gt;Rich Documentation and Good Test Cases Coverage&lt;/li&gt;
   &lt;li&gt;Join by Creating Pull Requests against &lt;a href=&quot;https://github.com/apache/incubator-rocketmq-externals/tree/master/rocketmq-flume&quot;&gt;RocketMQ Flume Repository&lt;/a&gt;&lt;/li&gt;
 &lt;/ol&gt;</content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;&quot;/assets/images/rmq-logo.png&quot;, &quot;bio&quot;=&gt;&quot;An open source distributed messaging and streaming data platform.&quot;, &quot;location&quot;=&gt;&quot;Hangzhou, China&quot;, &quot;email&quot;=&gt;&quot;dev@rocketmq.incubator.apache.org&quot;, &quot;uri&quot;=&gt;&quot;http://incubator.staging.apache.org/projects/rocketmq.html&quot;, &quot;bitbucket&quot;=&gt;nil, &quot;codepen&quot;=&gt;nil, &quot;dribbble&quot;=&gt;nil, &quot;flickr&quot;=&gt;nil, &quot;facebook&quot;=&gt;nil, &quot;foursquare&quot;=&gt;nil, &quot;github&quot;=&gt;&quot;apache/incubator-rocketmq&quot;, &quot;google_plus&quot;=&gt;nil, &quot;keybase&quot;=&gt;nil, &quot;instagram&quot;=&gt;nil, &quot;lastfm&quot;=&gt;nil, &quot;linkedin&quot;=&gt;nil, &quot;pinterest&quot;=&gt;nil, &quot;soundcloud&quot;=&gt;nil, &quot;stackoverflow&quot;=&gt;&quot;questions/tagged/rocketmq&quot;, &quot;steam&quot;=&gt;nil, &quot
 ;tumblr&quot;=&gt;nil, &quot;twitter&quot;=&gt;&quot;ApacheRocketMQ&quot;, &quot;vine&quot;=&gt;nil, &quot;weibo&quot;=&gt;nil, &quot;xing&quot;=&gt;nil, &quot;youtube&quot;=&gt;nil, &quot;quora&quot;=&gt;&quot;topic/RocketMQ&quot;}</name><email>dev@rocketmq.incubator.apache.org</email><uri>http://incubator.staging.apache.org/projects/rocketmq.html</uri></author><category term="Activity" /><category term="Code" /><category term="Marathon" /><summary type="html">ROCKETMQ CODE MARATHON 
-January 5th 2017</summary></entry><entry><title type="html">Mastering Component Compatible Dependency</title><link href="/maven/mastering-component-compatible-dependency/" rel="alternate" type="text/html" title="Mastering Component Compatible Dependency" /><published>2016-12-23T00:00:00+08:00</published><updated>2016-12-23T00:00:00+08:00</updated><id>/maven/mastering-component-compatible-dependency</id><content type="html" xml:base="/maven/mastering-component-compatible-dependency/">&lt;p&gt;This article mainly includes three parts.at first,I will introduce compatibility principle(more details see &lt;a href=&quot;http://blog.csdn.net/fengjia10/article/details/7799227&quot;&gt;here&lt;/a&gt;) briefly.followed by a detailed elaborating about Java component compatible dependency,including the interface-oriented programming,single component signature protection,single component compatibility protection and multi-component compatibility compile time checking.Finally is the review and pr
 ospect,especially about &lt;strong&gt;Dependency Mediator&lt;/strong&gt; project.&lt;/p&gt;
-
-&lt;aside class=&quot;sidebar__right&quot;&gt;
-&lt;nav class=&quot;toc&quot;&gt;
-    &lt;header&gt;&lt;h4 class=&quot;nav__title&quot;&gt;&lt;i class=&quot;fa fa-file-text&quot;&gt;&lt;/i&gt; On This Page&lt;/h4&gt;&lt;/header&gt;
-&lt;ul class=&quot;toc__menu&quot; id=&quot;markdown-toc&quot;&gt;
-  &lt;li&gt;&lt;a href=&quot;#compatibility&quot; id=&quot;markdown-toc-compatibility&quot;&gt;Compatibility&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;#component-compatible-dependency&quot; id=&quot;markdown-toc-component-compatible-dependency&quot;&gt;Component Compatible Dependency&lt;/a&gt;    &lt;ul&gt;
-      &lt;li&gt;&lt;a href=&quot;#interface-oriented-programming&quot; id=&quot;markdown-toc-interface-oriented-programming&quot;&gt;Interface-oriented programming&lt;/a&gt;&lt;/li&gt;
-      &lt;li&gt;&lt;a href=&quot;#single-component-signature-protection&quot; id=&quot;markdown-toc-single-component-signature-protection&quot;&gt;Single component signature protection&lt;/a&gt;&lt;/li&gt;
-      &lt;li&gt;&lt;a href=&quot;#single-component-compatibility-protection&quot; id=&quot;markdown-toc-single-component-compatibility-protection&quot;&gt;Single component compatibility protection&lt;/a&gt;&lt;/li&gt;
-      &lt;li&gt;&lt;a href=&quot;#multi-component-compatibility-compile-time-checking&quot; id=&quot;markdown-toc-multi-component-compatibility-compile-time-checking&quot;&gt;Multi-component compatibility compile time checking&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-  &lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;#summary&quot; id=&quot;markdown-toc-summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;
-
-  &lt;/nav&gt;
-&lt;/aside&gt;
-
-&lt;h1 id=&quot;compatibility&quot;&gt;Compatibility&lt;/h1&gt;
-
-&lt;p&gt;what is compatibility?it is also the key to understanding the compatible dependency.Compatibility, often catch our eyes through two forms,&lt;strong&gt;binary compatibility&lt;/strong&gt;,that means they can run the same executable code, typically machine code for a general purpose computer CPU.within the framework of Release-to-Release Binary Compatibility in SOM (Forman, Conner, Danforth, and Raper, Proceedings of OOPSLA ‘95), Java programming language binaries are binary compatible under all relevant transformations that the authors identify (with some caveats with respect to the addition of instance variables). here is a list of some important binary compatible changes that the Java programming language supports:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;Reimplementing existing methods, constructors, and initializers to improve performance.&lt;/li&gt;
-  &lt;li&gt;Changing methods or constructors to return values on inputs for which they previously either threw exceptions that normally should not occur or failed by going into an infinite loop or causing a deadlock.&lt;/li&gt;
-  &lt;li&gt;Adding new fields, methods, or constructors to an existing class or interface.&lt;/li&gt;
-  &lt;li&gt;Deleting private fields, methods, or constructors of a class.&lt;/li&gt;
-  &lt;li&gt;When an entire package is updated, deleting default (package-only) access fields, methods, or constructors of classes and interfaces in the package.&lt;/li&gt;
-  &lt;li&gt;Reordering the fields, methods, or constructors in an existing type declaration.&lt;/li&gt;
-  &lt;li&gt;Moving a method upward in the class hierarchy.&lt;/li&gt;
-  &lt;li&gt;Reordering the list of direct superinterfaces of a class or interface.&lt;/li&gt;
-  &lt;li&gt;Inserting new class or interface types in the type hierarchy.&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;p&gt;Generally,java language is &lt;strong&gt;upwards binary-compatible&lt;/strong&gt; with previous version,such as Java SE 6 is upwards binary-compatible with J2SE 5.0 except for some minor incompatibilities.You can get details from &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/compatibility-137541.html#binary&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
-
-&lt;p&gt;Another compatibility form,we call it &lt;strong&gt;source compatibility&lt;/strong&gt;,meaning that recompilation is necessary.Java language does not support downward source compatibility. Such as if source files use new language features or Java SE platform APIs, they will not be usable with an earlier version of the Java platform. Usually it will throw similar error like this:&lt;/p&gt;
-
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;UnsupportedClassVersionError&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;core&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;MessageConsumer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;
-         &lt;span class=&quot;n&quot;&gt;Unsupported&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;major&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;minor&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;51.0&lt;/span&gt;
-         &lt;span class=&quot;n&quot;&gt;at&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;ClassLoader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;defineClass1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Native&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Method&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
-         &lt;span class=&quot;n&quot;&gt;at&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;ClassLoader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;defineClassCond&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Unknown&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Source&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;Java language source compatibility policy is as follows,except for any incompatibilities listed further below:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;Maintenance releases (such as 1.7.25, 1.7.26) do not introduce any new language features or APIs. They will maintain source-compatibility with each other.&lt;/li&gt;
-  &lt;li&gt;Functionality releases and major releases (such as 1.4.0,5.0,6.0,7.0,8.0) maintain upwards but not downwards source-compatibility.&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;p&gt;Let’s sum up before going on:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;Document those incompatibility cases as much as possible, even some rare circumstances and corner cases.&lt;/li&gt;
-  &lt;li&gt;Recommend developer to provide facilities that alert developers to the impact of changes on pre-existing binaries that cannot be recompiled.&lt;/li&gt;
-  &lt;li&gt;Generally speaking,Binary Compatibility problems may occur in the following situations:&lt;/li&gt;
-  &lt;li&gt;&lt;strong&gt;Replacing the old with the new&lt;/strong&gt;,such as the Java platform Profiling Architecture in the Java SE6,JVMDI was removed and JVMPI was disabled in Java SE 6.&lt;/li&gt;
-  &lt;li&gt;&lt;strong&gt;Combinatorial resolution&lt;/strong&gt;,such as Non class files have been moved from rt.jar in Java SE 6.if -Xbootclasspath:&lt;path to=&quot;&quot; rt.jar=&quot;&quot;&gt; is specified,and request any resource files will fail since these resources now reside in a different jar file called resources.jar.&lt;/path&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;strong&gt;Behavior change&lt;/strong&gt;,such as Java SE 6 will throw an OverlappingFileLockException,if the application attempts to lock the overlapping region other instances of FileChannel that has been locked, in order to realize the backward compatibility, it provides disableSystemWideOverlappingFileLockCheck system properties. again, also in Java SE 6, jar will preserve file modification dates and times during extract, through the sun.tools.jar.useExtractionTime=true to achieve backward compatibility.&lt;/li&gt;
-  &lt;li&gt;&lt;strong&gt;Structure change&lt;/strong&gt;,this is also the key problem to solve in &lt;strong&gt;Dependency Mediator&lt;/strong&gt; project. generally speaking,modification and deletion belonging to incompatible operations.and more attentions must be paid in the RPC service maintenance, more detailed description,please refer to an &lt;a href=&quot;http://blog.csdn.net/fengjia10/article/details/7799227&quot;&gt;article&lt;/a&gt; I wrote before. also you can read the the thirteenth chapter of Java language specification.&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h1 id=&quot;component-compatible-dependency&quot;&gt;Component Compatible Dependency&lt;/h1&gt;
-
-&lt;p&gt;This article don’t talk about &lt;strong&gt;dependency analysis&lt;/strong&gt; and &lt;strong&gt;dependency decoupling&lt;/strong&gt;,if you care these topics,please read &lt;a href=&quot;http://java.dzone.com/articles/dependency-analysis-and-1&quot;&gt;Dependency Analysis and the Modularisation of Java Programs&lt;/a&gt;.highly recommending you try to dive into open source project &lt;a href=&quot;http://xplrarc.massey.ac.nz/&quot;&gt;Architecture Explorer&lt;/a&gt;,through bcel technology,analyzing and measuring component’s dependency relationship.but in my opinion,&lt;a href=&quot;http://clarkware.com/software/JDepend.html&quot;&gt;Jdepend&lt;/a&gt; was surely the most distinguished tool in dependency analysis and dependency decoupling area.it traverses Java class file directories and generates design quality metrics for each Java package,also allows you to automatically measure the quality of a design in terms of its extensibility, reusability, and maintainability t
 o manage package dependencies effectively.&lt;/p&gt;
-
-&lt;p&gt;Let’s return,ask yourself,have you ever been disturbed by the following problems?&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;Your service depend a volatile service,volatile means your service depending neither an abstract class nor a interface,this class update at irregular intervals,you often encountered errors such as &lt;strong&gt;NoSuchMethodError&lt;/strong&gt;,&lt;strong&gt;NoSuchFieldError&lt;/strong&gt; and &lt;strong&gt;NoClassDefFoundError&lt;/strong&gt; etc.&lt;/li&gt;
-  &lt;li&gt;You are developing a new feature,but this feature can not backward compatible with previous version,
-what should you do ? How do you give a incompatible list in your release report.&lt;/li&gt;
-  &lt;li&gt;Java language library is a superb collection of beautiful things,how do you make a rational dependency exclusion and effective mediate various dependency problems when developing.&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;p&gt;It is the time to introduce the key idea - &lt;strong&gt;Mediating Components Compatible Dependency&lt;/strong&gt;.Specifically,it includs the following basic principles:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;Interface-oriented programming&lt;/li&gt;
-  &lt;li&gt;Single component signature protection&lt;/li&gt;
-  &lt;li&gt;Single component compatibility protection&lt;/li&gt;
-  &lt;li&gt;Multi-component compatibility compile time checking&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h2 id=&quot;interface-oriented-programming&quot;&gt;Interface-oriented programming&lt;/h2&gt;
-
-&lt;p&gt;Interface-oriented programming,It’s easier said than done.I will cite SLF4J design philosophy explain this principle.&lt;/p&gt;
-
-&lt;p&gt;Differing from commons logging,SLF4J use &lt;strong&gt;static binder technology&lt;/strong&gt; so as to avoid notorious &lt;a href=&quot;http://articles.qos.ch/classloader.html&quot;&gt;classloader problem&lt;/a&gt;,every concrete log implementation must 
-have a class named StaticLoggerBinder and implementing SLF4J spi LoggerFactoryBinder.thus you just depend SLF4J api,not concerned about underlying implementation.some people may asking,why choose SLF4J not commons logging,I can also depend commons logging api but not concret implementation?it’s not performance but classloader problem.JCL discovery process relies on classloader hacks to find the logging framework at runtime but this mechanism leads to numerous problems including unexpected behavior,hard to debug classloading problems resulting in increased complexity.This is nicely captured by Ceki (the author of Log4J, SLF4J and Logback) in Think again before adopting the commons-logging API (which also mentions memory leaks problems observed with JCL).and this is why SLF4J, which uses static bindings, has been created. Let’s see.how to find the concrete realizations in SLF4J:&lt;/p&gt;
-
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// We need to use the name of the StaticLoggerBinder class, but we can't reference&lt;/span&gt;
-&lt;span class=&quot;c1&quot;&gt;// the class itself.&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;STATIC_LOGGER_BINDER_PATH&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;org/slf4j/impl/StaticLoggerBinder.class&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
- &lt;span class=&quot;cm&quot;&gt;/**
-  * It is LoggerFactory's responsibility to track version changes and manage
-  * the compatibility list.
-  * It is assumed that all versions in the 1.6 are mutually compatible.
-  */&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;API_COMPATIBILITY_LIST&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[]{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;1.6&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;1.7&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;};&lt;/span&gt;
-
-&lt;span class=&quot;c1&quot;&gt;// private constructor prevents instantiation&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;LoggerFactory&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{}&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;versionSanityCheck&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
- &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;requested&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;StaticLoggerBinder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;REQUESTED_API_VERSION&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-    &lt;span class=&quot;kt&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;API_COMPATIBILITY_LIST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;requested&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;startsWith&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;API_COMPATIBILITY_LIST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-          &lt;span class=&quot;n&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-     &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-      &lt;span class=&quot;n&quot;&gt;Util&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;report&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;The requested version &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;requested&lt;/span&gt;
-           &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot; by your slf4j binding is not compatible with &quot;&lt;/span&gt;
-           &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Arrays&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;asList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;API_COMPATIBILITY_LIST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;());&lt;/span&gt;
-      &lt;span class=&quot;n&quot;&gt;Util&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;report&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;See &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;VERSION_MISMATCH&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot; for further details.&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;NoSuchFieldError&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;nsfe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
- &lt;span class=&quot;c1&quot;&gt;// given our large user base and SLF4J's commitment to backward&lt;/span&gt;
- &lt;span class=&quot;c1&quot;&gt;// compatibility, we cannot cry here. Only for implementations&lt;/span&gt;
- &lt;span class=&quot;c1&quot;&gt;// which willingly declare a REQUESTED_API_VERSION field do we&lt;/span&gt;
- &lt;span class=&quot;c1&quot;&gt;// emit compatibility warnings.&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Throwable&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
- &lt;span class=&quot;c1&quot;&gt;// we should never reach here&lt;/span&gt;
- &lt;span class=&quot;n&quot;&gt;Util&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;report&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Unexpected problem occured during version sanity check&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;you can use these skills at your library.just Let others depend on your interface package,detecting certain implementation statically.&lt;/p&gt;
-
-&lt;p&gt;If you have developed an old version library,naming it as 2.x.x.next version,you hope to refactor some implementations,how to process multi-version compatibility?here is a skill from maven dependency plugin:&lt;/p&gt;
-
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hint&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;isMaven31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;maven31&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;isMaven2x&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;maven2&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;maven3&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-
-&lt;span class=&quot;cm&quot;&gt;/**
-* Check the current Maven version to see if it's Maven 2.x.
-*/&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;isMaven2x&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-   &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;canFindCoreClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;org.apache.maven.project.DependencyResolutionRequest&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Maven 3 specific&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-
-&lt;span class=&quot;cm&quot;&gt;/**
-* Check the current Maven version to see if it's Maven 3.1.
-*/&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;isMaven31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-   &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;canFindCoreClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;org.eclipse.aether.artifact.Artifact&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Maven 3.1 specific&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;h2 id=&quot;single-component-signature-protection&quot;&gt;Single component signature protection&lt;/h2&gt;
-
-&lt;p&gt;Secondly,Single component signature protection,you can using &lt;a href=&quot;http://mojo.codehaus.org/animal-sniffer/&quot;&gt;Animal Sniffer project&lt;/a&gt; as well-known Guava library,Animal Sniffer provides tools to assist verifying that classes compiled with a newer JDK/API are compatible with an older JDK/API.&lt;/p&gt;
-
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plugin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-   &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;groupId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;codehaus&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mojo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;groupId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-   &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;artifactId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;animal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sniffer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;maven&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plugin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;artifactId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-   &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;configuration&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-     &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;signature&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-       &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;groupId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;codehaus&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mojo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;signature&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;groupId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-       &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;artifactId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;java16&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sun&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;artifactId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-       &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-     &lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;signature&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-   &lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;configuration&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-   &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;executions&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-     &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;execution&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-       &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;check&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;java16&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sun&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-       &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;phase&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;phase&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-       &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;goals&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-         &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;goal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;check&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;goal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-       &lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;goals&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-     &lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;execution&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-   &lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;executions&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
- &lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plugin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;So from now on, when you performing a mvn test or mvn install operation. If there is an incompatibility in one of the projects, you would find some output like this:&lt;/p&gt;
-
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;INFO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;animal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;sniffer:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;check&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;execution:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;check&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;api&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}]&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;INFO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Checking&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;unresolved&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;references&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;codehaus&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mojo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;signature&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;java16&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;sun:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Undefined&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;reference:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;contains&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Ljava&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CharSequence&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Z&lt;/span&gt; &lt;span clas
 s=&quot;n&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;home&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;workspace&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kafka&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;classes&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kafka&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tools&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;Producer&lt;/
 span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;More details please see &lt;a href=&quot;http://blog.gvsig.org/2011/07/25/hunting-api-incompatibilities-with-the-animal-sniffer-project/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
-
-&lt;h2 id=&quot;single-component-compatibility-protection&quot;&gt;Single component compatibility protection&lt;/h2&gt;
-
-&lt;p&gt;If your a SOA develper,you almost concerned with single component compatibility protection.[Clirr project] (http://clirr.sourceforge.net/) may be your best choice.Clirr is a tool that checks Java libraries for binary and source compatibility with older releases. Basically you give it two sets of jar files and Clirr dumps out a list of changes in the public api. The Clirr Ant task can be configured to break the build if it detects incompatible api changes. In a continuous integration process Clirr can automatically prevent accidental introduction of binary or source compatibility problems.&lt;/p&gt;
-
-&lt;p&gt;How to use it?just add some config snippets in your pom :&lt;/p&gt;
-
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plugin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;groupId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;codehaus&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mojo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;groupId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;artifactId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;clirr&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;maven&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plugin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;artifactId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.6&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plugin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;then,run &lt;code class=&quot;highlighter-rouge&quot;&gt;mvn clirr:check&lt;/code&gt;,output may be like this:&lt;/p&gt;
-
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;INFO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;---&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;clirr&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;maven&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;plugin:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.6&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;check&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cli&lt;/span&gt;&lt;span class=&qu
 ot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;common&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;---&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;INFO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;artifact&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;intl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;cmq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cmq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;common&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;checking&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&qu
 ot;&gt;updates&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b2bmirror&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;all&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;INFO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Comparing&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;version:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;2.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;7005&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CompletionListener&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Parameter&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
 class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;onCompletion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CommonMessage&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;has&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;changed&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;its&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt;   &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class
 =&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;common&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CommonMessage&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;7005&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CompletionListener&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Parameter&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
 class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;onException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CommonMessage&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt; &lt;span class=&quot;
 n&quot;&gt;has&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;changed&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;its&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;common&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CommonMessage&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;7005&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;MessageProducer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Parameter&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span cla
 ss=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CommonResult&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CommonMessage&lt;/span&gt;&lt;span class=&quot;o&quo
 t;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;has&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;changed&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;its&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;common&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CommonMessage&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;7005&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;MessageProducer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Parameter&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span cla
 ss=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CommonResult&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CommonMessage&lt;/span&gt;&lt;span class=&quot;o&quo
 t;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CompletionListener&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;'&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;has&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;changed&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;its&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;alibaba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt
 ;/span&gt;&lt;span class=&quot;na&quot;&gt;mq&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;common&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;CommonMessage&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;Some inspiration in &lt;strong&gt;Dependency Mediator&lt;/strong&gt; project just come from here.more topics about compatible,you can reference from series article &lt;a href=&quot;http://wiki.eclipse.org/index.php/Evolving_Java-based_APIs&quot;&gt;Evolving Java-based APIs&lt;/a&gt;&lt;/p&gt;
-
-&lt;h2 id=&quot;multi-component-compatibility-compile-time-checking&quot;&gt;Multi-component compatibility compile time checking&lt;/h2&gt;
-
-&lt;p&gt;Last but not least,Multi-component compatibility compile time checking.it’s the time to formally recommend project &lt;strong&gt;Dependency Mediator&lt;/strong&gt;.&lt;/p&gt;
-
-&lt;p&gt;unlike karaf and other lightness modular technology(like osgi,class names do not need to be unique,but the combination of class names and their defining ClassLoader must to be unique),&lt;strong&gt;Dependency Mediator&lt;/strong&gt; try to remedy component dependency conflicting problem before the runtime rather than using customized &lt;a href=&quot;http://www.onjava.com/pub/a/onjava/2005/04/13/dependencies.html&quot;&gt;classLoader&lt;/a&gt; to agree with the coexistence of different version components,thus avoid some well-konwn errors,such as &lt;strong&gt;NoSuchMethodError&lt;/strong&gt;,&lt;strong&gt;NoSuchFieldError&lt;/strong&gt; and &lt;strong&gt;NoClassDefFoundError&lt;/strong&gt; etc.&lt;/p&gt;
-
-&lt;p&gt;What is the principle of &lt;strong&gt;Dependency Mediator&lt;/strong&gt;?&lt;strong&gt;Dependency Mediator&lt;/strong&gt; try to mediate various component conflicting problems.It uses jar or class as the smallest component unit,that is ComponentEntry:&lt;/p&gt;
-
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ComponentEntry&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Comparable&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ComponentEntry&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-  &lt;span class=&quot;cm&quot;&gt;/**
-   * Similar file name
-   */&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;   &lt;span class=&quot;n&quot;&gt;pathName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-  &lt;span class=&quot;cm&quot;&gt;/**
-   * Component name ,such as fully-qualified class name or jar name
-   */&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;   &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-  &lt;span class=&quot;cm&quot;&gt;/**
-   * Name of the jar which contains this entry,this field may be null
-   */&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;   &lt;span class=&quot;n&quot;&gt;jarName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-  &lt;span class=&quot;cm&quot;&gt;/**
-   * Jar entry meta info,if it is a jar file,this field may be null
-   */&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;JarEntry&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;entry&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;....&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;It could scan directory(also including classpath,if you set system property scanClasspath) and POM.if it happen to jar,but you setting checkJars to false,it could detect inner MANIFEST file,using &lt;strong&gt;Build-Jdk&lt;/strong&gt; and &lt;strong&gt;Built-By&lt;/strong&gt; properties to decide whether duplicated jars.thus,output only report whether including duplicated jar.but if you 
-setting checkJars to true or nothing to do with this property,it will further analyzes whether existing incompatible cases.&lt;/p&gt;
-
-&lt;p&gt;It also provides a maven plugin,if your project is a web project,you must run mvn insall before next step. Maven plugin also comply with the latest annotation mojo api rather than version 2.x.x doclet api.&lt;/p&gt;
-
-&lt;p&gt;&lt;strong&gt;Dependency Mediator&lt;/strong&gt; take advantage of &lt;strong&gt;nearest definition&lt;/strong&gt; dependency mediation strategy. this determines what version of a dependency will be used when multiple versions of an artifact are encountered. &lt;strong&gt;nearest definition&lt;/strong&gt;,means that it will use the version of the closest dependency to your project in the tree of dependencies. You can always guarantee a version by declaring it explicitly in your project’s POM. Note that if two dependency versions are at the same depth in the dependency tree, until Maven 2.0.8 it was not defined which one would win, but since Maven 2.0.9 it’s the order in the declaration that counts: the first declaration wins.
-&lt;strong&gt;nearest definition&lt;/strong&gt; means that the version used will be the closest one to your project in the tree of dependencies, eg. if dependencies for A, B, and C are defined as A -&amp;gt; B -&amp;gt; C -&amp;gt; D 2.0 and A -&amp;gt; E -&amp;gt; D 1.0, then D 1.0 will be used when building A because the path from A to D through E is shorter. You could explicitly add a dependency to D 2.0 in A to force the use of D 2.0.&lt;/p&gt;
-
-&lt;p&gt;If you consider the dependency hierarchy as a binary tree structure,Undoubtedly,&lt;strong&gt;nearest definition&lt;/strong&gt; means the &lt;strong&gt;minimum depth&lt;/strong&gt;. so if you put some higher version dependency library after lower version one(may be transitive dependency),you will face incompatible conflicting problems.Such as :&lt;/p&gt;
-
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WARNING&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Founded&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;conflicting&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dependency&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;component:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;apache&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;thrift&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;libthrift:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;jar&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Resolved&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;version&lt;/span&gt; &lt;span class=&
 quot;n&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;apache&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;thrift&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;libthrift:jar:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;compile&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;But&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;found&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;conflicting&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;artifact&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;org&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;apache&lt;/span&gt;&lt;span class=&q
 uot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;thrift&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;libthrift:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.9&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;In this case,you could fix this problem through place libthrift 0.9.1 before the library imported through transitive dependency.&lt;/p&gt;
-
-&lt;p&gt;of course,all the establishment must meet a premise,that is:&lt;/p&gt;
-&lt;ul&gt;
-  &lt;li&gt;&lt;strong&gt;Functionality releases and major releases(such as 1.4.x, 1.5.x,2.x.x,3.x.x) have source compatibility problems.&lt;/strong&gt;&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;p&gt;In &lt;strong&gt;Dependency Mediator&lt;/strong&gt; 2.0 version,you could customize version differentiation strategy,not limited the aformentioned.by the way, also in 2.0,I will improvement compatible dependency mediator, please wait and see.&lt;/p&gt;
-
-&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;
-
-&lt;p&gt;Through this article, you almost calculated the evolution process of the &lt;strong&gt;Dependency Mediator&lt;/strong&gt; project.in my opinion,integration with the maven enforcer plugin may be a better choice.After all,I hope &lt;strong&gt;Dependency Mediator&lt;/strong&gt; can keep sustainable development.I would try and donate this project to codehaus in the near future.&lt;/p&gt;
-
-&lt;p&gt;If you have better idea or improving suggestion, please contact &lt;a href=&quot;mailto:dev@rocketmq.incubator.apache.org&quot;&gt;dev@rocketmq.incubator.apache.org&lt;/a&gt;.&lt;/p&gt;</content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;&quot;/assets/images/rmq-logo.png&quot;, &quot;bio&quot;=&gt;&quot;An open source distributed messaging and streaming data platform.&quot;, &quot;location&quot;=&gt;&quot;Hangzhou, China&quot;, &quot;email&quot;=&gt;&quot;dev@rocketmq.incubator.apache.org&quot;, &quot;uri&quot;=&gt;&quot;http://incubator.staging.apache.org/projects/rocketmq.html&quot;, &quot;bitbucket&quot;=&gt;nil, &quot;codepen&quot;=&gt;nil, &quot;dribbble&quot;=&gt;nil, &quot;flickr&quot;=&gt;nil, &quot;facebook&quot;=&gt;nil, &quot;foursquare&quot;=&gt;nil, &quot;github&quot;=&gt;&quot;apache/incubator-rocketmq&quot;, &quot;google_plus&quot;=&gt;nil, &quot;keybase&quot;=&gt;nil, &quot;instagram&quot;=&gt;nil, &quot;lastfm&quot;=&gt;nil, &quot;linke
 din&quot;=&gt;nil, &quot;pinterest&quot;=&gt;nil, &quot;soundcloud&quot;=&gt;nil, &quot;stackoverflow&quot;=&gt;&quot;questions/tagged/rocketmq&quot;, &quot;steam&quot;=&gt;nil, &quot;tumblr&quot;=&gt;nil, &quot;twitter&quot;=&gt;&quot;ApacheRocketMQ&quot;, &quot;vine&quot;=&gt;nil, &quot;weibo&quot;=&gt;nil, &quot;xing&quot;=&gt;nil, &quot;youtube&quot;=&gt;nil, &quot;quora&quot;=&gt;&quot;topic/RocketMQ&quot;}</name><email>dev@rocketmq.incubator.apache.org</email><uri>http://incubator.staging.apache.org/projects/rocketmq.html</uri></author><category term="Compatibility" /><category term="Dependency" /><category term="Java" /><category term="Maven" /><summary type="html">This article mainly includes three parts.at first,I will introduce compatibility principle(more details see here) briefly.followed by a detailed elaborating about Java component compatible dependency,including the interface-oriented programming,single component signature protection,single component compatibility pr
 otection and multi-component compatibility compile time checking.Finally is the review and prospect,especially about Dependency Mediator project.</summary></entry></feed>
+January 5th 2017</summary></entry></feed>

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/rocketmq/Field-Report-Meetup-Beijing/index.html
----------------------------------------------------------------------
diff --git a/content/rocketmq/Field-Report-Meetup-Beijing/index.html b/content/rocketmq/Field-Report-Meetup-Beijing/index.html
index b4324d2..424fccf 100644
--- a/content/rocketmq/Field-Report-Meetup-Beijing/index.html
+++ b/content/rocketmq/Field-Report-Meetup-Beijing/index.html
@@ -419,7 +419,8 @@
 ">Previous</a>
     
     
-      <a href="#" class="pagination--pager disabled">Next</a>
+      <a href="/rocketmq/rmq-jvm-linuxkernel-configuration/" class="pagination--pager" title="RocketMQ JVM/Linux Configuration
+">Next</a>
     
   </nav>
 


[4/4] incubator-rocketmq-site git commit: Release at 2017.07.14

Posted by yu...@apache.org.
Release at 2017.07.14


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/commit/e3cf6d7a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/tree/e3cf6d7a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/diff/e3cf6d7a

Branch: refs/heads/asf-site
Commit: e3cf6d7afb43423becd5fea112bea5d739945a3f
Parents: f36d617
Author: yukon <yu...@apache.org>
Authored: Fri Jul 14 16:18:05 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Fri Jul 14 16:18:05 2017 +0800

----------------------------------------------------------------------
 content/about/contact/index.html                |   4 +-
 content/about/rewards/index.html                |   4 +-
 content/about/team/index.html                   |   4 +-
 content/categories/index.html                   |  32 +
 content/collection-archive/index.html           |   2 +
 content/docs/batch-example/index.html           |   4 +-
 content/docs/best-practice-broker/index.html    |   4 +-
 content/docs/best-practice-consumer/index.html  |   4 +-
 content/docs/best-practice-namesvr/index.html   |   4 +-
 content/docs/best-practice-producer/index.html  |   4 +-
 content/docs/broadcast-example/index.html       |   4 +-
 content/docs/cli-admin-tool/index.html          |   4 +-
 content/docs/cluster-deployment/index.html      |   4 +-
 content/docs/code-guidelines/index.html         |   4 +-
 content/docs/core-concept/index.html            |   4 +-
 content/docs/create-pull-request/index.html     |   4 +-
 content/docs/documentation/index.html           |   4 +-
 content/docs/faq/index.html                     |   4 +-
 content/docs/filter-by-sql92-example/index.html |   4 +-
 content/docs/logappender-example/index.html     |   4 +-
 content/docs/motivation/index.html              |   4 +-
 content/docs/openmessaging-example/index.html   |   4 +-
 content/docs/order-example/index.html           |   4 +-
 content/docs/pull-request/index.html            |   4 +-
 content/docs/quick-start/index.html             |   4 +-
 content/docs/release-manual.html                |   4 +-
 content/docs/rmq-arc/index.html                 |   4 +-
 content/docs/rmq-deployment/index.html          |   4 +-
 content/docs/roadmap/index.html                 |   4 +-
 content/docs/schedule-example/index.html        |   4 +-
 content/docs/simple-example/index.html          |   4 +-
 content/dowloading/releases/index.html          |   4 +-
 content/feed.xml                                | 362 +++---------
 .../Field-Report-Meetup-Beijing/index.html      |   3 +-
 .../index.html                                  | 588 +++++++++++++++++++
 content/sitemap.xml                             |   4 +
 content/tags/index.html                         | 128 ++++
 content/year-archive/index.html                 |  28 +
 38 files changed, 924 insertions(+), 343 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/about/contact/index.html
----------------------------------------------------------------------
diff --git a/content/about/contact/index.html b/content/about/contact/index.html
index a34bb12..b086ef2 100644
--- a/content/about/contact/index.html
+++ b/content/about/contact/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -212,7 +212,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="CONTACT">
     <meta itemprop="description" content="Contact.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 29, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/about/rewards/index.html
----------------------------------------------------------------------
diff --git a/content/about/rewards/index.html b/content/about/rewards/index.html
index e866e72..585dc41 100644
--- a/content/about/rewards/index.html
+++ b/content/about/rewards/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -212,7 +212,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="REWARDS">
     <meta itemprop="description" content="Rewards.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="January 25, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/about/team/index.html
----------------------------------------------------------------------
diff --git a/content/about/team/index.html b/content/about/team/index.html
index 8b3cb45..c550268 100644
--- a/content/about/team/index.html
+++ b/content/about/team/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -212,7 +212,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="TEAM">
     <meta itemprop="description" content="Project team.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 29, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/categories/index.html
----------------------------------------------------------------------
diff --git a/content/categories/index.html b/content/categories/index.html
index 09be4af..cb7eabf 100644
--- a/content/categories/index.html
+++ b/content/categories/index.html
@@ -382,6 +382,12 @@
 
 
 
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+
+
+
 
 <!-- group_items -->
 
@@ -583,6 +589,32 @@ January 5th 2017
     
     <h2 class="archive__item-title" itemprop="headline">
       
+        <a href="/rocketmq/rmq-jvm-linuxkernel-configuration/" rel="permalink">RocketMQ JVM/Linux Configuration
+</a>
+      
+    </h2>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+</p>
+    
+    <p class="archive__item-excerpt" itemprop="description">This is an introduction for configuring RocketMQ broker JVM/OS parameters. It points out certain specified configurations that should be thinking about befor...</p>
+  </article>
+</div>
+  
+    
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
         <a href="/rocketmq/Field-Report-Meetup-Beijing/" rel="permalink">Field Report of Apache RocketMQ Meetup Beijing
 </a>
       

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/collection-archive/index.html
----------------------------------------------------------------------
diff --git a/content/collection-archive/index.html b/content/collection-archive/index.html
index f4c9142..7c85737 100644
--- a/content/collection-archive/index.html
+++ b/content/collection-archive/index.html
@@ -990,6 +990,8 @@ and the coordination is mainly achieved through managing...</p>
   
     
   
+    
+  
 
   
     

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/batch-example/index.html
----------------------------------------------------------------------
diff --git a/content/docs/batch-example/index.html b/content/docs/batch-example/index.html
index 81717b4..48fea15 100644
--- a/content/docs/batch-example/index.html
+++ b/content/docs/batch-example/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Batch Example">
     <meta itemprop="description" content="How to use batch in Rocketmq">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="April 25, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/best-practice-broker/index.html
----------------------------------------------------------------------
diff --git a/content/docs/best-practice-broker/index.html b/content/docs/best-practice-broker/index.html
index 5b65208..b6facc3 100644
--- a/content/docs/best-practice-broker/index.html
+++ b/content/docs/best-practice-broker/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Best Practice For Broker">
     <meta itemprop="description" content="Some useful tips for users.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 25, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/best-practice-consumer/index.html
----------------------------------------------------------------------
diff --git a/content/docs/best-practice-consumer/index.html b/content/docs/best-practice-consumer/index.html
index 84db67b..f16d7de 100644
--- a/content/docs/best-practice-consumer/index.html
+++ b/content/docs/best-practice-consumer/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Best Practice For Consumer">
     <meta itemprop="description" content="Some useful tips for users.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 25, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/best-practice-namesvr/index.html
----------------------------------------------------------------------
diff --git a/content/docs/best-practice-namesvr/index.html b/content/docs/best-practice-namesvr/index.html
index 14d3670..eac0357 100644
--- a/content/docs/best-practice-namesvr/index.html
+++ b/content/docs/best-practice-namesvr/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Best Practice For NameServer">
     <meta itemprop="description" content="In Apache RocketMQ, name servers are designed to coordinate each component of the distributed systemand the coordination is mainly achieved through managing topic routing information.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 25, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/best-practice-producer/index.html
----------------------------------------------------------------------
diff --git a/content/docs/best-practice-producer/index.html b/content/docs/best-practice-producer/index.html
index 5243189..4a8a30c 100644
--- a/content/docs/best-practice-producer/index.html
+++ b/content/docs/best-practice-producer/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Best Practice For Producer">
     <meta itemprop="description" content="Some useful tips for users.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 25, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/broadcast-example/index.html
----------------------------------------------------------------------
diff --git a/content/docs/broadcast-example/index.html b/content/docs/broadcast-example/index.html
index 3dc8ae9..82cd9ea 100644
--- a/content/docs/broadcast-example/index.html
+++ b/content/docs/broadcast-example/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Broadcasting">
     <meta itemprop="description" content="How to send broadcast messages in Apache RocketMQ.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="April 25, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/cli-admin-tool/index.html
----------------------------------------------------------------------
diff --git a/content/docs/cli-admin-tool/index.html b/content/docs/cli-admin-tool/index.html
index ac5fece..0e950a1 100644
--- a/content/docs/cli-admin-tool/index.html
+++ b/content/docs/cli-admin-tool/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="CLI Admin Tool">
     <meta itemprop="description" content="RocketMQ provides a CLI admin tool belt to query, manage and diagnose various issues.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 17, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/cluster-deployment/index.html
----------------------------------------------------------------------
diff --git a/content/docs/cluster-deployment/index.html b/content/docs/cluster-deployment/index.html
index 9e88757..251846f 100644
--- a/content/docs/cluster-deployment/index.html
+++ b/content/docs/cluster-deployment/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Cluster Configuration and Deployment">
     <meta itemprop="description" content="Prerequisite">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 17, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/code-guidelines/index.html
----------------------------------------------------------------------
diff --git a/content/docs/code-guidelines/index.html b/content/docs/code-guidelines/index.html
index b12fd24..4b7d883 100644
--- a/content/docs/code-guidelines/index.html
+++ b/content/docs/code-guidelines/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Coding Guidelines">
     <meta itemprop="description" content="Apache RocketMQ Coding Guidelines">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 30, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/core-concept/index.html
----------------------------------------------------------------------
diff --git a/content/docs/core-concept/index.html b/content/docs/core-concept/index.html
index c731084..3be03f3 100644
--- a/content/docs/core-concept/index.html
+++ b/content/docs/core-concept/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Core Concept">
     <meta itemprop="description" content="">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 17, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/create-pull-request/index.html
----------------------------------------------------------------------
diff --git a/content/docs/create-pull-request/index.html b/content/docs/create-pull-request/index.html
index b9e0115..42864d8 100644
--- a/content/docs/create-pull-request/index.html
+++ b/content/docs/create-pull-request/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="How to create Pull Request">
     <meta itemprop="description" content="This page guides you through the pull request creation process.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 25, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/documentation/index.html
----------------------------------------------------------------------
diff --git a/content/docs/documentation/index.html b/content/docs/documentation/index.html
index ea64671..f2a0434 100644
--- a/content/docs/documentation/index.html
+++ b/content/docs/documentation/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Documentation">
     <meta itemprop="description" content="Apache RocketMQ Documentation">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="March 02, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/faq/index.html
----------------------------------------------------------------------
diff --git a/content/docs/faq/index.html b/content/docs/faq/index.html
index 4885733..ce38c73 100644
--- a/content/docs/faq/index.html
+++ b/content/docs/faq/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Frequently Asked Questions">
     <meta itemprop="description" content="The following questions are frequently asked with regard to the RocketMQ project in general.General1. Why did we create rocketmq project instead of selecting other products?Please refer to Why RocketMQ">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 28, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/filter-by-sql92-example/index.html
----------------------------------------------------------------------
diff --git a/content/docs/filter-by-sql92-example/index.html b/content/docs/filter-by-sql92-example/index.html
index 2ac347e..8a54fb8 100644
--- a/content/docs/filter-by-sql92-example/index.html
+++ b/content/docs/filter-by-sql92-example/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Filter Example">
     <meta itemprop="description" content="How to filter messages by SQL92 in Apache RocketMQ.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="April 27, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/logappender-example/index.html
----------------------------------------------------------------------
diff --git a/content/docs/logappender-example/index.html b/content/docs/logappender-example/index.html
index edaf9dd..94f1885 100644
--- a/content/docs/logappender-example/index.html
+++ b/content/docs/logappender-example/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Logappender Example">
     <meta itemprop="description" content="How to use logappender in RocketMQ.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="June 09, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/motivation/index.html
----------------------------------------------------------------------
diff --git a/content/docs/motivation/index.html b/content/docs/motivation/index.html
index 22560ef..931e3e9 100644
--- a/content/docs/motivation/index.html
+++ b/content/docs/motivation/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Motivation">
     <meta itemprop="description" content="At early stages, we constructed our distributed messaging middleware based on ActiveMQ 5.x(prior to 5.3). Our multinational business uses it for asynchronous communication, search, social network activity stream, data pipeline,even in its trade processes. As our trade business throughput rises, pressure originating from our messaging clusteralso becomes urgent.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 17, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/openmessaging-example/index.html
----------------------------------------------------------------------
diff --git a/content/docs/openmessaging-example/index.html b/content/docs/openmessaging-example/index.html
index 68a8047..d989f24 100644
--- a/content/docs/openmessaging-example/index.html
+++ b/content/docs/openmessaging-example/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="OpenMessaging Example">
     <meta itemprop="description" content="How to use OpenMessaging in RocketMQ.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="June 09, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/order-example/index.html
----------------------------------------------------------------------
diff --git a/content/docs/order-example/index.html b/content/docs/order-example/index.html
index cd4da43..d3697ad 100644
--- a/content/docs/order-example/index.html
+++ b/content/docs/order-example/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Order Message">
     <meta itemprop="description" content="How to send and receive ordered messages in Apache RocketMQ.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="April 25, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/pull-request/index.html
----------------------------------------------------------------------
diff --git a/content/docs/pull-request/index.html b/content/docs/pull-request/index.html
index fdd1760..5ad4d1c 100644
--- a/content/docs/pull-request/index.html
+++ b/content/docs/pull-request/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="How to manage Pull Request">
     <meta itemprop="description" content="This page guides you through Git setup and contribution process.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 25, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/quick-start/index.html
----------------------------------------------------------------------
diff --git a/content/docs/quick-start/index.html b/content/docs/quick-start/index.html
index 0cf5259..c84abcf 100644
--- a/content/docs/quick-start/index.html
+++ b/content/docs/quick-start/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Quick Start">
     <meta itemprop="description" content="How to quickly install and setup Apache RocketMQ.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="December 30, 2016">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/release-manual.html
----------------------------------------------------------------------
diff --git a/content/docs/release-manual.html b/content/docs/release-manual.html
index e47e090..3ba87b1 100644
--- a/content/docs/release-manual.html
+++ b/content/docs/release-manual.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Release Manual">
     <meta itemprop="description" content="Apache RocketMQ Release Manual">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="February 08, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/rmq-arc/index.html
----------------------------------------------------------------------
diff --git a/content/docs/rmq-arc/index.html b/content/docs/rmq-arc/index.html
index b378b6a..dffd04d 100644
--- a/content/docs/rmq-arc/index.html
+++ b/content/docs/rmq-arc/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="RocketMQ Architecture">
     <meta itemprop="description" content="The main Architecture of Apache RocketMQ.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="April 25, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/rmq-deployment/index.html
----------------------------------------------------------------------
diff --git a/content/docs/rmq-deployment/index.html b/content/docs/rmq-deployment/index.html
index 04439e6..4d2fc7c 100644
--- a/content/docs/rmq-deployment/index.html
+++ b/content/docs/rmq-deployment/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Deployment">
     <meta itemprop="description" content="How to deploy the Apache RocketMQ.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="April 25, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/roadmap/index.html
----------------------------------------------------------------------
diff --git a/content/docs/roadmap/index.html b/content/docs/roadmap/index.html
index a42dced..2b4fc12 100644
--- a/content/docs/roadmap/index.html
+++ b/content/docs/roadmap/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="The RoadMap of Apache RocketMQ">
     <meta itemprop="description" content="4.1.0~4.3.0-incubating RoadMap:">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="March 08, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/schedule-example/index.html
----------------------------------------------------------------------
diff --git a/content/docs/schedule-example/index.html b/content/docs/schedule-example/index.html
index f7db620..8869b23 100644
--- a/content/docs/schedule-example/index.html
+++ b/content/docs/schedule-example/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Schedule example">
     <meta itemprop="description" content="How to use schedule component to reduce pull in RocketMQ.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="April 25, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/docs/simple-example/index.html
----------------------------------------------------------------------
diff --git a/content/docs/simple-example/index.html b/content/docs/simple-example/index.html
index 918d5ea..91ad113 100644
--- a/content/docs/simple-example/index.html
+++ b/content/docs/simple-example/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Simple Message Example">
     <meta itemprop="description" content="How to send simple message to reduce pull in RocketMQ.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="April 25, 2017">
 
     <div class="page__inner-wrap">

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/e3cf6d7a/content/dowloading/releases/index.html
----------------------------------------------------------------------
diff --git a/content/dowloading/releases/index.html b/content/dowloading/releases/index.html
index 3bb94e2..12a2492 100644
--- a/content/dowloading/releases/index.html
+++ b/content/dowloading/releases/index.html
@@ -57,7 +57,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2017-07-05T11:47:38+08:00">
+  <meta property="article:published_time" content="2017-07-14T16:07:01+08:00">
 
 
 
@@ -450,7 +450,7 @@
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
     <meta itemprop="headline" content="Downloading the Apache RocketMQ Releases">
     <meta itemprop="description" content="Compatibility GuideThe table below shows the supported jre environment for components of each release.">
-    <meta itemprop="datePublished" content="July 05, 2017">
+    <meta itemprop="datePublished" content="July 14, 2017">
     <meta itemprop="dateModified" content="February 21, 2017">
 
     <div class="page__inner-wrap">