Migrate rocketmq-flume to here.

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

Branch: refs/heads/master
Commit: e2148280525c3efd67408e6032b43225c9c67c73
Parents: ede20ba
Author: yukon <[email protected]>
Authored: Wed Mar 15 16:17:11 2017 +0800
Committer: yukon <[email protected]>
Committed: Wed Mar 15 16:17:11 2017 +0800

----------------------------------------------------------------------
 .gitignore                                      |   8 -
 LICENSE                                         | 201 -----------
 LICENSE-BIN                                     | 201 -----------
 NOTICE                                          |   5 -
 NOTICE-BIN                                      |  18 -
 README.md                                       | 124 -------
 pom.xml                                         | 141 --------
 rocketmq-flume-ng/.gitignore                    |   8 +
 rocketmq-flume-ng/LICENSE                       | 201 +++++++++++
 rocketmq-flume-ng/LICENSE-BIN                   | 201 +++++++++++
 rocketmq-flume-ng/NOTICE                        |   5 +
 rocketmq-flume-ng/NOTICE-BIN                    |  18 +
 rocketmq-flume-ng/README.md                     | 124 +++++++
 rocketmq-flume-ng/pom.xml                       | 141 ++++++++
 rocketmq-flume-ng/rocketmq-flume-sink/pom.xml   |  27 ++
 .../rocketmq/flume/ng/sink/RocketMQSink.java    | 245 +++++++++++++
 .../flume/ng/sink/RocketMQSinkConstants.java    |  41 +++
 .../flume/ng/sink/RocketMQSinkTest.java         | 342 +++++++++++++++++++
 .../src/test/resources/log4j.properties         |  23 ++
 rocketmq-flume-ng/rocketmq-flume-souce/pom.xml  |  27 ++
 .../rocketmq/flume/ng/souce/RocketMQSource.java | 192 +++++++++++
 .../flume/ng/souce/RocketMQSourceConstants.java |  44 +++
 .../flume/ng/souce/RocketMQSourceTest.java      | 208 +++++++++++
 .../src/test/resources/log4j.properties         |  23 ++
 rocketmq-flume-ng/style/copyright/Apache.xml    |  24 ++
 .../style/copyright/profiles_settings.xml       |  64 ++++
 rocketmq-flume-ng/style/rmq_checkstyle.xml      | 135 ++++++++
 rocketmq-flume-ng/style/rmq_codeStyle.xml       | 143 ++++++++
 rocketmq-flume-sink/pom.xml                     |  27 --
 .../rocketmq/flume/ng/sink/RocketMQSink.java    | 245 -------------
 .../flume/ng/sink/RocketMQSinkConstants.java    |  41 ---
 .../flume/ng/sink/RocketMQSinkTest.java         | 342 -------------------
 .../src/test/resources/log4j.properties         |  23 --
 rocketmq-flume-souce/pom.xml                    |  27 --
 .../rocketmq/flume/ng/souce/RocketMQSource.java | 192 -----------
 .../flume/ng/souce/RocketMQSourceConstants.java |  44 ---
 .../flume/ng/souce/RocketMQSourceTest.java      | 208 -----------
 .../src/test/resources/log4j.properties         |  23 --
 style/copyright/Apache.xml                      |  24 --
 style/copyright/profiles_settings.xml           |  64 ----
 style/rmq_checkstyle.xml                        | 135 --------
 style/rmq_codeStyle.xml                         | 143 --------
 42 files changed, 2236 insertions(+), 2236 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 1d9a6d3..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-.*
-*.class
-*.jar
-*.war
-*.iml
-.settings
-target
-!.gitignore
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/LICENSE
----------------------------------------------------------------------
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 7f77f44..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (properties) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/LICENSE-BIN
----------------------------------------------------------------------
diff --git a/LICENSE-BIN b/LICENSE-BIN
deleted file mode 100644
index 7f77f44..0000000
--- a/LICENSE-BIN
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (properties) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/NOTICE
----------------------------------------------------------------------
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index 5384857..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,5 +0,0 @@
-Apache RocketMQ (incubating)
-Copyright 2016-2017 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/NOTICE-BIN
----------------------------------------------------------------------
diff --git a/NOTICE-BIN b/NOTICE-BIN
deleted file mode 100644
index 34641fa..0000000
--- a/NOTICE-BIN
+++ /dev/null
@@ -1,18 +0,0 @@
-Apache RocketMQ (incubating)
-Copyright 2016-2017 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-------
-This product has a bundle Flume:
-
-Apache Flume
-Copyright 2012 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-Portions of this software were developed at
-Cloudera, Inc. (http://www.cloudera.com/).

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
deleted file mode 100644
index 1d7a17e..0000000
--- a/README.md
+++ /dev/null
@@ -1,124 +0,0 @@
-rocketmq-flume-ng Sink & Source
-==========================
-
-This project is used to receive and send messages between
-[RocketMQ](http://rocketmq.incubator.apache.org/) and 
[Flume-ng](https://github.com/apache/flume)
-
-1. Firstly, please get familiar with 
[RocketMQ](http://rocketmq.incubator.apache.org/) and 
[Flume-ng](https://github.com/apache/flume).
-2. Ensure that the jar related to 
[RocketMQ](http://rocketmq.incubator.apache.org/dowloading/releases) exists in 
local maven repository.
-3. Execute the following command in rocketmq-flume root directory
-
-   `mvn clean install dependency:copy-dependencies`
-
-4. Copy the jar depended by rocketmq-flume to `$FLUME_HOME/lib`(the specific 
jar will be given later)
-
-## Sink
-
-### Sink configuration instruction
-
-| key           | nullable | default                |description|
-|---------------|----------|------------------------|-----------|
-| nameserver    | false    |                        |nameserver address|
-| topic         | true     | "FLUME_TOPIC"          |topic name|
-| tag           | true     | "FLUME_TAG"            |tag name|
-| producerGroup | true     | "FLUME_PRODUCER_GROUP" |producerGroup name|
-| batchSize     | true     | 1                      |max batch event taking 
num|
-| maxProcessTime| true     | 1000                   |max batch event taking 
time,default is 1s|
-
-### Sink example
-
-- Write the Flume configuration file
-
-```
-agent1.sources=source1
-agent1.channels=channel1
-agent1.sinks=sink1
-
-agent1.sources.source1.type=avro
-agent1.sources.source1.bind=0.0.0.0
-agent1.sources.source1.port=15151
-agent1.sources.source1.channels=channel1
-
-agent1.sinks.sink1.type=org.apache.rocketmq.flume.ng.sink.RocketMQSink
-agent1.sinks.sink1.nameserver=x.x.x.x:9876
-agent1.sinks.sink1.channel=channel1
-
-agent1.channels.channel1.type=memory
-agent1.channels.channel1.capacity=100
-agent1.channels.channel1.transactionCapacity=100
-agent1.channels.channel1.keep-alive=3
-```
-
-- Copy the jars below to `$FLUME_HOME/lib`
-
-```
-rocketmq-flume-sink-0.0.1-SNAPSHOT.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target)
-fastjson-1.2.12.jar (path: $PROJECT_HOME/rocketmq-flume-sink/target/dependency)
-netty-all-4.0.36.Final.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
-rocketmq-client-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
-rocketmq-common-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
-rocketmq-remoting-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
-```
-
-- Execute the command and check the console output
-
-```
-shell1> $FLUME_HOME/bin/flume-ng agent -c conf -f conf/flume.conf -n agent1 
-Dflume.root.logger=INFO,console
-shell2> $FLUME_HOME/bin/flume-ng avro-client -H localhost -p 15151 -F 
$FLUME_HOME/README
-```
-
-
-## Source
-
-### Source configuration instruction
-
-
-| key           | nullable | default              |description|
-|---------------|----------|----------------------|-----------|
-| nameserver    | false    |                      |nameserver address|
-| topic         | true     |"FLUME_TOPIC"         |topic name|
-| tag           | true     |"FLUME_TAG"           |tag name|
-| consumerGroup | true     |"FLUME_CONSUMER_GROUP"|consumerGroup name|
-| messageModel  | true     | "BROADCASTING"       |RocketMQ message 
model,"BROADCASTING" or "CLUSTERING"|
-| batchSize     | true     | 32                   |batch consuming messages 
from RocketMq max num|
-
-
-### Source example
-- Write the Flume configuration file
-
-```
-agent1.sources=source1
-agent1.channels=channel1
-agent1.sinks=sink1
-
-agent1.sources.source1.type=org.apache.rocketmq.flume.ng.source.RocketMQSource
-agent1.sources.source1.nameserver=x.x.x.x:9876
-agent1.sources.source1.channels=channel1
-
-agent1.sinks.sink1.type=logger
-agent1.sinks.sink1.channel=channel1
-
-agent1.channels.channel1.type=memory
-agent1.channels.channel1.capacity=100
-agent1.channels.channel1.transactionCapacity=100
-agent1.channels.channel1.keep-alive=3
-```
-
-- Copy the jars below to `$FLUME_HOME/lib`
-
-```
-rocketmq-flume-souce-0.0.1-SNAPSHOT.jar (path: 
$PROJECT_HOME/rocketmq-flume-source/target)
-fastjson-1.2.12.jar (path: $PROJECT_HOME/rocketmq-flume-sink/target/dependency)
-netty-all-4.0.36.Final.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
-rocketmq-client-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
-rocketmq-common-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
-rocketmq-remoting-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
-```
-
-- Send some test message to RocketMQ
-
-- Execute the command and check the console output
-
-```
-$FLUME_HOME/bin/flume-ng agent -c conf -f conf/flume.conf -n agent1 
-Dflume.root.logger=INFO,console
-```

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index d6651ae..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache</groupId>
-    <artifactId>rocketmq-flume</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
-    <name>rocketmq-flume</name>
-    <modules>
-        <module>rocketmq-flume-sink</module>
-        <module>rocketmq-flume-souce</module>
-    </modules>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <!--maven properties -->
-        <maven.test.skip>false</maven.test.skip>
-        <maven.javadoc.skip>true</maven.javadoc.skip>
-        <!-- compiler settings properties -->
-        <maven.compiler.source>1.7</maven.compiler.source>
-        <maven.compiler.target>1.7</maven.compiler.target>
-        <flume.version>1.7.0</flume.version>
-        <rocketmq.version>4.0.0-incubating</rocketmq.version>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.rocketmq</groupId>
-            <artifactId>rocketmq-client</artifactId>
-            <version>${rocketmq.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.flume</groupId>
-            <artifactId>flume-ng-core</artifactId>
-            <version>${flume.version}</version>
-        </dependency>
-        <!--test -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-            <version>4.12</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.rocketmq</groupId>
-            <artifactId>rocketmq-namesrv</artifactId>
-            <version>${rocketmq.version}</version>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>ch.qos.logback</groupId>
-                    <artifactId>logback-classic</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.rocketmq</groupId>
-            <artifactId>rocketmq-broker</artifactId>
-            <version>${rocketmq.version}</version>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>ch.qos.logback</groupId>
-                    <artifactId>logback-classic</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.5.1</version>
-                <configuration>
-                    <source>${maven.compiler.source}</source>
-                    <target>${maven.compiler.target}</target>
-                    <compilerVersion>${maven.compiler.source}</compilerVersion>
-                    <showDeprecation>true</showDeprecation>
-                    <showWarnings>true</showWarnings>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <version>0.12</version>
-                <configuration>
-                    <excludes>
-                        <exclude>README.md</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-checkstyle-plugin</artifactId>
-                <version>2.17</version>
-                <executions>
-                    <execution>
-                        <id>verify</id>
-                        <phase>verify</phase>
-                        <configuration>
-                            
<configLocation>style/rmq_checkstyle.xml</configLocation>
-                            <encoding>UTF-8</encoding>
-                            <consoleOutput>true</consoleOutput>
-                            <failsOnError>true</failsOnError>
-                            
<includeTestSourceDirectory>false</includeTestSourceDirectory>
-                            <includeTestResources>false</includeTestResources>
-                        </configuration>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-            </resource>
-        </resources>
-    </build>
-    <packaging>pom</packaging>
-</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/rocketmq-flume-ng/.gitignore
----------------------------------------------------------------------
diff --git a/rocketmq-flume-ng/.gitignore b/rocketmq-flume-ng/.gitignore
new file mode 100644
index 0000000..1d9a6d3
--- /dev/null
+++ b/rocketmq-flume-ng/.gitignore
@@ -0,0 +1,8 @@
+.*
+*.class
+*.jar
+*.war
+*.iml
+.settings
+target
+!.gitignore
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/rocketmq-flume-ng/LICENSE
----------------------------------------------------------------------
diff --git a/rocketmq-flume-ng/LICENSE b/rocketmq-flume-ng/LICENSE
new file mode 100644
index 0000000..7f77f44
--- /dev/null
+++ b/rocketmq-flume-ng/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (properties) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/rocketmq-flume-ng/LICENSE-BIN
----------------------------------------------------------------------
diff --git a/rocketmq-flume-ng/LICENSE-BIN b/rocketmq-flume-ng/LICENSE-BIN
new file mode 100644
index 0000000..7f77f44
--- /dev/null
+++ b/rocketmq-flume-ng/LICENSE-BIN
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (properties) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/rocketmq-flume-ng/NOTICE
----------------------------------------------------------------------
diff --git a/rocketmq-flume-ng/NOTICE b/rocketmq-flume-ng/NOTICE
new file mode 100644
index 0000000..5384857
--- /dev/null
+++ b/rocketmq-flume-ng/NOTICE
@@ -0,0 +1,5 @@
+Apache RocketMQ (incubating)
+Copyright 2016-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/rocketmq-flume-ng/NOTICE-BIN
----------------------------------------------------------------------
diff --git a/rocketmq-flume-ng/NOTICE-BIN b/rocketmq-flume-ng/NOTICE-BIN
new file mode 100644
index 0000000..34641fa
--- /dev/null
+++ b/rocketmq-flume-ng/NOTICE-BIN
@@ -0,0 +1,18 @@
+Apache RocketMQ (incubating)
+Copyright 2016-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+
+------
+This product has a bundle Flume:
+
+Apache Flume
+Copyright 2012 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Portions of this software were developed at
+Cloudera, Inc. (http://www.cloudera.com/).

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/rocketmq-flume-ng/README.md
----------------------------------------------------------------------
diff --git a/rocketmq-flume-ng/README.md b/rocketmq-flume-ng/README.md
new file mode 100644
index 0000000..1d7a17e
--- /dev/null
+++ b/rocketmq-flume-ng/README.md
@@ -0,0 +1,124 @@
+rocketmq-flume-ng Sink & Source
+==========================
+
+This project is used to receive and send messages between
+[RocketMQ](http://rocketmq.incubator.apache.org/) and 
[Flume-ng](https://github.com/apache/flume)
+
+1. Firstly, please get familiar with 
[RocketMQ](http://rocketmq.incubator.apache.org/) and 
[Flume-ng](https://github.com/apache/flume).
+2. Ensure that the jar related to 
[RocketMQ](http://rocketmq.incubator.apache.org/dowloading/releases) exists in 
local maven repository.
+3. Execute the following command in rocketmq-flume root directory
+
+   `mvn clean install dependency:copy-dependencies`
+
+4. Copy the jar depended by rocketmq-flume to `$FLUME_HOME/lib`(the specific 
jar will be given later)
+
+## Sink
+
+### Sink configuration instruction
+
+| key           | nullable | default                |description|
+|---------------|----------|------------------------|-----------|
+| nameserver    | false    |                        |nameserver address|
+| topic         | true     | "FLUME_TOPIC"          |topic name|
+| tag           | true     | "FLUME_TAG"            |tag name|
+| producerGroup | true     | "FLUME_PRODUCER_GROUP" |producerGroup name|
+| batchSize     | true     | 1                      |max batch event taking 
num|
+| maxProcessTime| true     | 1000                   |max batch event taking 
time,default is 1s|
+
+### Sink example
+
+- Write the Flume configuration file
+
+```
+agent1.sources=source1
+agent1.channels=channel1
+agent1.sinks=sink1
+
+agent1.sources.source1.type=avro
+agent1.sources.source1.bind=0.0.0.0
+agent1.sources.source1.port=15151
+agent1.sources.source1.channels=channel1
+
+agent1.sinks.sink1.type=org.apache.rocketmq.flume.ng.sink.RocketMQSink
+agent1.sinks.sink1.nameserver=x.x.x.x:9876
+agent1.sinks.sink1.channel=channel1
+
+agent1.channels.channel1.type=memory
+agent1.channels.channel1.capacity=100
+agent1.channels.channel1.transactionCapacity=100
+agent1.channels.channel1.keep-alive=3
+```
+
+- Copy the jars below to `$FLUME_HOME/lib`
+
+```
+rocketmq-flume-sink-0.0.1-SNAPSHOT.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target)
+fastjson-1.2.12.jar (path: $PROJECT_HOME/rocketmq-flume-sink/target/dependency)
+netty-all-4.0.36.Final.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
+rocketmq-client-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
+rocketmq-common-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
+rocketmq-remoting-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
+```
+
+- Execute the command and check the console output
+
+```
+shell1> $FLUME_HOME/bin/flume-ng agent -c conf -f conf/flume.conf -n agent1 
-Dflume.root.logger=INFO,console
+shell2> $FLUME_HOME/bin/flume-ng avro-client -H localhost -p 15151 -F 
$FLUME_HOME/README
+```
+
+
+## Source
+
+### Source configuration instruction
+
+
+| key           | nullable | default              |description|
+|---------------|----------|----------------------|-----------|
+| nameserver    | false    |                      |nameserver address|
+| topic         | true     |"FLUME_TOPIC"         |topic name|
+| tag           | true     |"FLUME_TAG"           |tag name|
+| consumerGroup | true     |"FLUME_CONSUMER_GROUP"|consumerGroup name|
+| messageModel  | true     | "BROADCASTING"       |RocketMQ message 
model,"BROADCASTING" or "CLUSTERING"|
+| batchSize     | true     | 32                   |batch consuming messages 
from RocketMq max num|
+
+
+### Source example
+- Write the Flume configuration file
+
+```
+agent1.sources=source1
+agent1.channels=channel1
+agent1.sinks=sink1
+
+agent1.sources.source1.type=org.apache.rocketmq.flume.ng.source.RocketMQSource
+agent1.sources.source1.nameserver=x.x.x.x:9876
+agent1.sources.source1.channels=channel1
+
+agent1.sinks.sink1.type=logger
+agent1.sinks.sink1.channel=channel1
+
+agent1.channels.channel1.type=memory
+agent1.channels.channel1.capacity=100
+agent1.channels.channel1.transactionCapacity=100
+agent1.channels.channel1.keep-alive=3
+```
+
+- Copy the jars below to `$FLUME_HOME/lib`
+
+```
+rocketmq-flume-souce-0.0.1-SNAPSHOT.jar (path: 
$PROJECT_HOME/rocketmq-flume-source/target)
+fastjson-1.2.12.jar (path: $PROJECT_HOME/rocketmq-flume-sink/target/dependency)
+netty-all-4.0.36.Final.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
+rocketmq-client-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
+rocketmq-common-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
+rocketmq-remoting-4.0.0-incubating.jar (path: 
$PROJECT_HOME/rocketmq-flume-sink/target/dependency)
+```
+
+- Send some test message to RocketMQ
+
+- Execute the command and check the console output
+
+```
+$FLUME_HOME/bin/flume-ng agent -c conf -f conf/flume.conf -n agent1 
-Dflume.root.logger=INFO,console
+```

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/rocketmq-flume-ng/pom.xml
----------------------------------------------------------------------
diff --git a/rocketmq-flume-ng/pom.xml b/rocketmq-flume-ng/pom.xml
new file mode 100644
index 0000000..d6651ae
--- /dev/null
+++ b/rocketmq-flume-ng/pom.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache</groupId>
+    <artifactId>rocketmq-flume</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>rocketmq-flume</name>
+    <modules>
+        <module>rocketmq-flume-sink</module>
+        <module>rocketmq-flume-souce</module>
+    </modules>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <!--maven properties -->
+        <maven.test.skip>false</maven.test.skip>
+        <maven.javadoc.skip>true</maven.javadoc.skip>
+        <!-- compiler settings properties -->
+        <maven.compiler.source>1.7</maven.compiler.source>
+        <maven.compiler.target>1.7</maven.compiler.target>
+        <flume.version>1.7.0</flume.version>
+        <rocketmq.version>4.0.0-incubating</rocketmq.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.rocketmq</groupId>
+            <artifactId>rocketmq-client</artifactId>
+            <version>${rocketmq.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.flume</groupId>
+            <artifactId>flume-ng-core</artifactId>
+            <version>${flume.version}</version>
+        </dependency>
+        <!--test -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+            <version>4.12</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.rocketmq</groupId>
+            <artifactId>rocketmq-namesrv</artifactId>
+            <version>${rocketmq.version}</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>ch.qos.logback</groupId>
+                    <artifactId>logback-classic</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.rocketmq</groupId>
+            <artifactId>rocketmq-broker</artifactId>
+            <version>${rocketmq.version}</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>ch.qos.logback</groupId>
+                    <artifactId>logback-classic</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.5.1</version>
+                <configuration>
+                    <source>${maven.compiler.source}</source>
+                    <target>${maven.compiler.target}</target>
+                    <compilerVersion>${maven.compiler.source}</compilerVersion>
+                    <showDeprecation>true</showDeprecation>
+                    <showWarnings>true</showWarnings>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+                <version>0.12</version>
+                <configuration>
+                    <excludes>
+                        <exclude>README.md</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <version>2.17</version>
+                <executions>
+                    <execution>
+                        <id>verify</id>
+                        <phase>verify</phase>
+                        <configuration>
+                            
<configLocation>style/rmq_checkstyle.xml</configLocation>
+                            <encoding>UTF-8</encoding>
+                            <consoleOutput>true</consoleOutput>
+                            <failsOnError>true</failsOnError>
+                            
<includeTestSourceDirectory>false</includeTestSourceDirectory>
+                            <includeTestResources>false</includeTestResources>
+                        </configuration>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </build>
+    <packaging>pom</packaging>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/rocketmq-flume-ng/rocketmq-flume-sink/pom.xml
----------------------------------------------------------------------
diff --git a/rocketmq-flume-ng/rocketmq-flume-sink/pom.xml 
b/rocketmq-flume-ng/rocketmq-flume-sink/pom.xml
new file mode 100644
index 0000000..9cbe073
--- /dev/null
+++ b/rocketmq-flume-ng/rocketmq-flume-sink/pom.xml
@@ -0,0 +1,27 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache</groupId>
+        <artifactId>rocketmq-flume</artifactId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <artifactId>rocketmq-flume-sink</artifactId>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/e2148280/rocketmq-flume-ng/rocketmq-flume-sink/src/main/java/org/apache/rocketmq/flume/ng/sink/RocketMQSink.java
----------------------------------------------------------------------
diff --git 
a/rocketmq-flume-ng/rocketmq-flume-sink/src/main/java/org/apache/rocketmq/flume/ng/sink/RocketMQSink.java
 
b/rocketmq-flume-ng/rocketmq-flume-sink/src/main/java/org/apache/rocketmq/flume/ng/sink/RocketMQSink.java
new file mode 100644
index 0000000..6a04f48
--- /dev/null
+++ 
b/rocketmq-flume-ng/rocketmq-flume-sink/src/main/java/org/apache/rocketmq/flume/ng/sink/RocketMQSink.java
@@ -0,0 +1,245 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.rocketmq.flume.ng.sink;
+
+import org.apache.rocketmq.client.exception.MQClientException;
+import org.apache.rocketmq.client.producer.DefaultMQProducer;
+import org.apache.rocketmq.client.producer.SendCallback;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.common.message.Message;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.apache.flume.Channel;
+import org.apache.flume.Context;
+import org.apache.flume.Event;
+import org.apache.flume.EventDeliveryException;
+import org.apache.flume.FlumeException;
+import org.apache.flume.Transaction;
+import org.apache.flume.conf.Configurable;
+import org.apache.flume.conf.ConfigurationException;
+import org.apache.flume.instrumentation.SinkCounter;
+import org.apache.flume.sink.AbstractSink;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static 
org.apache.rocketmq.flume.ng.sink.RocketMQSinkConstants.BATCH_SIZE_CONFIG;
+import static 
org.apache.rocketmq.flume.ng.sink.RocketMQSinkConstants.BATCH_SIZE_DEFAULT;
+import static 
org.apache.rocketmq.flume.ng.sink.RocketMQSinkConstants.MAX_PROCESS_TIME_CONFIG;
+import static 
org.apache.rocketmq.flume.ng.sink.RocketMQSinkConstants.MAX_PROCESS_TIME_DEFAULT;
+import static 
org.apache.rocketmq.flume.ng.sink.RocketMQSinkConstants.NAME_SERVER_CONFIG;
+import static 
org.apache.rocketmq.flume.ng.sink.RocketMQSinkConstants.PRODUCER_GROUP_CONFIG;
+import static 
org.apache.rocketmq.flume.ng.sink.RocketMQSinkConstants.PRODUCER_GROUP_DEFAULT;
+import static 
org.apache.rocketmq.flume.ng.sink.RocketMQSinkConstants.TAG_CONFIG;
+import static 
org.apache.rocketmq.flume.ng.sink.RocketMQSinkConstants.TAG_DEFAULT;
+import static 
org.apache.rocketmq.flume.ng.sink.RocketMQSinkConstants.TOPIC_CONFIG;
+import static 
org.apache.rocketmq.flume.ng.sink.RocketMQSinkConstants.TOPIC_DEFAULT;
+
+/**
+ *
+ */
+public class RocketMQSink extends AbstractSink implements Configurable {
+
+    private static final Logger log = 
LoggerFactory.getLogger(RocketMQSink.class);
+
+    private String nameServer;
+    private String topic;
+    private String tag;
+    private String producerGroup;
+    private int batchSize;
+    private long maxProcessTime;
+
+    /** Monitoring counter. */
+    private SinkCounter sinkCounter;
+
+    private DefaultMQProducer producer;
+
+    @Override
+    public void configure(Context context) {
+
+        nameServer = context.getString(NAME_SERVER_CONFIG);
+        if (nameServer == null) {
+            throw new ConfigurationException("NameServer must not be null");
+        }
+
+        topic = context.getString(TOPIC_CONFIG, TOPIC_DEFAULT);
+        tag = context.getString(TAG_CONFIG, TAG_DEFAULT);
+        producerGroup = context.getString(PRODUCER_GROUP_CONFIG, 
PRODUCER_GROUP_DEFAULT);
+        batchSize = context.getInteger(BATCH_SIZE_CONFIG, BATCH_SIZE_DEFAULT);
+        maxProcessTime = context.getLong(MAX_PROCESS_TIME_CONFIG, 
MAX_PROCESS_TIME_DEFAULT);
+
+        if (sinkCounter == null) {
+            sinkCounter = new SinkCounter(getName());
+        }
+    }
+
+    @Override
+    public synchronized void start() {
+
+        producer = new DefaultMQProducer(producerGroup);
+        producer.setNamesrvAddr(nameServer);
+        try {
+            producer.start();
+        } catch (MQClientException e) {
+            sinkCounter.incrementConnectionFailedCount();
+
+            log.error("RocketMQ producer start failed", e);
+            throw new FlumeException("Failed to start RocketMQ producer", e);
+        }
+
+        sinkCounter.incrementConnectionCreatedCount();
+        sinkCounter.start();
+
+        super.start();
+    }
+
+    @Override
+    public Status process() throws EventDeliveryException {
+
+        Channel channel = getChannel();
+        Transaction transaction = null;
+
+        try {
+            transaction = channel.getTransaction();
+            transaction.begin();
+
+            /*
+            batch take
+             */
+            List<Event> events = new ArrayList<>();
+            long beginTime = System.currentTimeMillis();
+            while (true) {
+                Event event = channel.take();
+                if (event != null) {
+                    events.add(event);
+                }
+
+                if (events.size() == batchSize
+                    || System.currentTimeMillis() - beginTime > 
maxProcessTime) {
+                    break;
+                }
+            }
+
+            if (events.size() == 0) {
+                sinkCounter.incrementBatchEmptyCount();
+
+                transaction.rollback();
+                return Status.BACKOFF;
+            }
+            /*
+            async send
+             */
+            CountDownLatch latch = new CountDownLatch(events.size());
+            AtomicInteger errorNum = new AtomicInteger();
+
+            for (Event event : events) {
+                byte[] body = event.getBody();
+                Message message = new Message(topic, tag, body);
+
+                if (log.isDebugEnabled()) {
+                    log.debug("Processing event,body={}", new String(body, 
"UTF-8"));
+                }
+                producer.send(message, new SendCallBackHandler(message, latch, 
errorNum));
+            }
+            latch.await();
+
+            sinkCounter.addToEventDrainAttemptCount(events.size());
+
+            if (errorNum.get() > 0) {
+                log.error("errorNum=" + errorNum + ",transaction will 
rollback");
+                transaction.rollback();
+                return Status.BACKOFF;
+            } else {
+                transaction.commit();
+
+                sinkCounter.addToEventDrainSuccessCount(events.size());
+
+                return Status.READY;
+            }
+
+        } catch (Exception e) {
+            log.error("Failed to processing event", e);
+
+            if (transaction != null) {
+                try {
+                    transaction.rollback();
+                } catch (Exception ex) {
+                    log.error("Failed to rollback transaction", ex);
+                    throw new EventDeliveryException("Failed to rollback 
transaction", ex);
+                }
+            }
+
+            return Status.BACKOFF;
+
+        } finally {
+            if (transaction != null) {
+                transaction.close();
+            }
+        }
+    }
+
+    @Override public synchronized void stop() {
+        producer.shutdown();
+
+        sinkCounter.incrementConnectionClosedCount();
+        sinkCounter.stop();
+
+        super.stop();
+    }
+
+    public class SendCallBackHandler implements SendCallback {
+
+        private final Message message;
+        private final CountDownLatch latch;
+        private final AtomicInteger errorNum;
+
+        SendCallBackHandler(Message message, CountDownLatch latch, 
AtomicInteger errorNum) {
+            this.message = message;
+            this.latch = latch;
+            this.errorNum = errorNum;
+        }
+
+        @Override
+        public void onSuccess(SendResult sendResult) {
+
+            latch.countDown();
+
+            if (log.isDebugEnabled()) {
+                try {
+                    log.debug("Sent event,body={},sendResult={}", new 
String(message.getBody(), "UTF-8"), sendResult);
+                } catch (UnsupportedEncodingException e) {
+                    log.error("Encoding error", e);
+                }
+            }
+        }
+
+        @Override
+        public void onException(Throwable e) {
+            latch.countDown();
+            errorNum.incrementAndGet();
+
+            try {
+                log.error("Message publish failed,body=" + new 
String(message.getBody(), "UTF-8"), e);
+            } catch (UnsupportedEncodingException e1) {
+                log.error("Encoding error", e);
+            }
+        }
+    }
+}
\ No newline at end of file


Reply via email to