Storm集成Kafka编程模型
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3974417.html
本文主要介绍如何在Storm编程实现与Kafka的集成
一、实现模型
数据流程:
1、Kafka Producter生成topic1主题的消息
2、Storm中有个Topology,包含了KafkaSpout、SenqueceBolt、KafkaBolt三个组件。其中KafkaSpout订阅了topic1主题消息,然后发送
给SenqueceBolt加工处理,最后数据由KafkaBolt生成topic2主题消息发送给Kafka
3、Kafka Consumer负责消费topic2主题的消息
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA5wAAADFCAYAAAA42/1zAAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7tnQecFNXSxQtYcs455yBRQBQVzCAoKiIgCioZI4oBIw8TBhBBJIkKKIqKYiAIKqCIAZCccw5LTiIg357iu2PvbM9MT57ZOfXe/NztvvHfvUOfrrp1M5xPMfFhx44dk9y5c/soZX86WnV37dolJUqUsB+Uj6PRGnMw/XK+Pi6q5XQwnKNVl9eX19cTgWjdk8H0y/vZ09VMezwYztGqy+ub9jp6OhKtaxRMv7y+nq5m2uPBcI5WXV7ftNfR05FoXaNg+o3W9c3oCSKPkwAJkAAJkAAJkAAJkAAJkAAJkEAwBCg4g6HHuiRAAiRAAiRAAiRAAiRAAiRAAh4JUHB6RMMTJEACJEACJEACJEACJEACJEACwRCg4AyGHuuSAAmQAAmQAAmQAAmQAAmQAAl4JEDB6RENT5AACZAACZAACZAACZAACZAACQRDgIIzGHqsSwIkQAIkQAIkQAIkQAIkQAIk4JEABadHNDxBAiRAAiRAAiRAAiRAAiRAAiQQDAEKzmDosS4JkAAJkAAJkAAJkAAJkAAJkIBHAhScHtHwBAmQAAmQAAmQAAmQAAmQAAmQQDAEKDiDoce6JEACJEACJEACJEACJEACJEACHglQcHpEwxMkQAIkQAIkQAIkQAIkQAIkQALBEKDgDIYe65IACZAACZAACZAACZAACZAACXgkkOHo0aPnPZ6N4xPHjh2T3Llzx/EM/Bs65+sfr3grzesbb1fMv/Hy+vrHK95K8/rG2xXzb7y8vv7xirfSvL7xdsX8Gy+vr3+8Ai2d5ESUBXMxWNf5pSErsvJEgPeGJzJpj5NVWiaejqQHVg899JD88ssvnqbI4yRAAiRAAiRAAhEgULZsWZk0aZJkzZo1TW8MqU2DhAdIgARIgATihQDFZrxcKY6TBEiABEggPRPYunWrbN++3XaKSbZHeZAESCBuCNDDE91LlZSUJI888ojceOON0R1Igve+aNGiBCfA6ZNA4hCYPXu24Lu3WbNmsnbtWlm9erXcdNNNkjFj8H6UlKVmkidPHjl58qRMnjxZ2rVrJzly5HDBffnll6VKlSrSpk0bHQONBEhA5I477pANGzZ4RMG/FI9oeIIE4oMAPTzRvU5nz56VBQsWUHBG9zKwdxIggQQhcPr0aYHoO3LkiPTq1UsuvfRSGTRokMybN0/eeOMNx6Lzvffek3/++Udy5crlInf+/HnB8aZNm0q/fv1k6tSpMmXKFBkyZIhUrFhRRSh+z5Ahg1SuXFnq1KmTINQ5TRIIjgAFZ3D8WJsEYoYAPTyRvxQQ+/Aw00iABEiABCJD4Msvv1Sx2bp1a2nfvr0Kxs6dO8uYMWNk+fLlLhG4bt06eeyxx2TgwIG2wjBbtmwyduxY9V4ePnxY28HPx48fV/HaoUMHFbAdO3aUHj16qNBcsmSJQJSiXYrNyFxv9pI+CFBwpo/ryFmQAAmQAAmQAAmQQLomcPDgQRk5cqTOEeLv3nvv1Z9PnTql/4W4NGG1+/fvF4TH3n///ZrIpFSpUlrG2J133in4LF26VNvp1q2bdOrUSRo0aCCNGzeWTJkyqVfz6quvlpkzZ8q+ffvkhx9+kEKFCkmrVq1k1apVUqNGjVRt8hcSIAF7AhSc9lx4lARIgARIgARIgATiisDevXvlo48+kt9++0127dolCD+F1w7ZI6+88kr11mXPnj3VnObMmaPrIOElhNcvVu3ff/+VZ555RpBdGyGtEILGvvjiCylQoIDOEfb333/LJ598omsxsQbTGjaL8xCOxqtp1p3hvxCWsJ9++knApWrVqpI/f349BoH5/fffy2WXXSYDBgzQ86+//rquI6WRAAl4J0DB6Z0Pz5IACZAACZAACZBAzBPYuHGj3HfffSrIYNiaAIIL4acrV67Uz9y5c3WNYubMmV3zGTx4sOzcuVOTfsSq4EQYK7yXv//+u+TNm1fntHDhQtccIKzPnDnjOmYY4L/VqlWTfPnypbp+8JS++uqrqY598803go8x9LlmzRrX7xCZMIhRYxCuFJwuHPyBBDwSoOD0iIYnSIAESIAESIAESCA+CIwePVrFJkJBISLhiYMnEOLsf//7n3rkIDrhxUNIKAyCCmIzHAaPJPrHJxiDkHzhhRdk1qxZ8uyzz8rPP/+swtkazrplyxbNGGuOnThxQrBFA9ZZwvPpbrfffrsKRXgvJ0yYIMOHD5cPP/xQqlevLo0aNZKrrrpKBSlEJxIFQbgj1BZe1ddee829Of5OAiTgg0BEBSdi6fGFh3h5pLDGGyZ8ESJLWKIb3irmzp1b1wbUqlVLvySvuOIKyZkzZ6Kj4fxJgARIgARIgAR8EIDoghUrVkyzrBqDR7B///76XFGiRAkVVTCsW8TzmDGIKax//PPPP/UQntHGjRunAg/rFyHoypcvLy1bthQINghbYw888ID8+uuvUrt2bU2o89RTT6mQnTZtmrz44ot67qKLLpJXXnlFP4sXL1YvK7aT6tu3ryxbtkwT9Kxfv14KFiyontrbbrtNm4cnE8mAIKjr1q2rCX1gBw4ccPV/7ty5VMeMiN60aVMa76apVLhwYf0RocewcuXKpZqTmR/EptUgQpG1FoIeaz1pJEACvglERHBibQC+tPAlQXFpf1Gw3gAfLHKHGP/ss8903cU111yj/yiULl3aviKPkgAJkAAJkAAJJDyBIkWK6D54EFvI2IoQWSOWIOLuvvvuVIxq1qwpycnJLg9n/fr1JUuWLFoGbeDZA+chQhGWCu+pCc1FaOubb77pStBj6sGx8Pzzz8vu3btd4s2cO3TokGb1RqgvxCbKIpkPfscaTAg+HMc6VGx7AnGLMTVp0kS+/vpr19ixFRXMiExzAkLQHIPoLlq0qHpC4dHt3r27qz5+gPcVfCAq9+zZo/Po06ePqwy8mtju6qWXXlIvqElEBDGOeghfRtbazz//XAU+jQRIwDuBsApOfDkh9GDGjBn6x40/WLzhwpccMn8hzAGiynwZeR9q+j4LIY4QEAhOfJHhbR/e9OFLdvr06Zr6u3fv3mSVvm8Dzo4ESIAESIAEAiJwzz33qHcSIajI5AqPYKVKldTrCO8m9qu0rmV89NFHNZkOysGQAMechxcSYhPPZ9g6BM9tMISevv/+++pAwLMJPJQw4w1EGCuisxCeapITmXM7duyQnj17ajbYbdu2qQcTz4YffPCBhsq2adNGPZ84D5s9e7YKTnfDy3lrn+Y8QnetXlcIWpgZPzySxvA8irFgzSaetZAcyITjIjkQBPoll1yic8HzGYTwihUrXKG1CK9FZBqj0FxI+QMJeCUQNsGJP9gnn3xS35LhC+D666+X6667zmNog9dRJsBJfKnjgzdpVapUkRYtWmgIy3fffSfz58/XNQZ//PGHvvXDW0AaCZAACZAACZAACRgCEGcQehBY2CMYQgl7UeIDTxxEE0JhH3744VTCzJ0gljohyy0MWV+N2MTv8HqiDwjFH3/80SU4TRvwMj7yyCMehRi8g7AyZcqoBxMv2OF4uOmmm/Q45oDlRXBYmFBX07b5LwQn+sH88HyJ8WJblHr16qXyekIMYp0mDCLc3RBCDK8rQobRrxGceOZCeXg5H3/8cVe1yZMnqzB94okn9BjCfDFWGgmQgG8CYRGcCENADD++FCCOEMqA0AaafwQQHoM3lli8jvAYhCbj93feeYd7P/mHkqVJgARIgARIIN0TgCCCpxJiDMtzIIqwXyVEFI59/PHHKvB69erlkcX27dtV0MGwnYrVUBdrHxH2inLuhhfnnpYAoa51PaTZqgTPhyZkFe3hOASnCZ117wNrSeGtREgvBCe8pbfccosKRIhtq8FL++CDD7q2NrGeg2jGFjIwhPZaDc4S8OvatWuqsSH8FutSIZThmcVaU0Sf0UiABLwTSDKpo70XE1eabV/lsLgbi9PxxYZQBGyqiy8HWuAE8IWPcBOIzr/++kvDQPBFizUVVnN6Le1Gwrp2VOyPxSMr+5nwaKgImAejeLw3Em3MobrmbIcEYpkAhB/CaPHp1KmTisO77rpLn+WwzMmb4HQ6L6tINHW8LZGyK496no6bNhEmjHWhWIZlQmbh1YS3FWa8lxDB2EvUahCcEIlIagRxaRXD2KcTYhWGREoTJ07Un2+++WYV1PigX6thDSuex4xhX04KzlSI+EuCE8DyQLvniiQn4QCo6KQcMqQhdTXEJpLdYN1hsOmwE/y6uaaPRfX4UsNaC/PlO378eM1qC3N6jex4sq4dFftj8cjKfiY8GkoC5qWak+9Ju37j8b6KxzHbsecxEkgPBOCNg2DCGsouXbroM5jVILTw8hrrEBF+6s0Q7opnN3g5N2/enKro8ePHNdcELFLLey6++GK5/PLL1eNpFbR41kSeC3gqYYcPH1YvJ7LougtfCFXrMXh9hw0bJm3btlXvr7sh3BfrYOFtNSKX26K4U+LvJJCWAELZ7Z6FQuZ6xKa7SG2NL6OGDRtSbKa9BkEfwVtAhHdgITzCa7GOAF5PX28Hg+6YDZAACZAACZAACcQsAbx8xppKiDDkesAzGZIEQTBhnSI8ccitAUMSIWPW5weEkSJpEMJeURdCDOsb8byBUF0IULz0NgIPwi4SBvGLbVasBnHZr18/PYTMt0OHDpVrr71Ws+hCVMP5YbZ/sRsj1qgitwjWaMKjaWfYTsaYe0Zcu/I8RgIk4JlAyATniBEj9M1aqVKlNMyBnk3P0IM5A08KQmEGDBig6zKwHgPhMjQSIAESIAESIIHEJIB1lVjO9L///U+T6Dz33HO2IJB9FWsajVlDTO+//35N5gPxhhfaZlsUbKcCwQnhahL5IKMslk1Fw0yUF7yZWK+K3Q8wZiRdRI4LPCMhfBgJj5BFF9lmsX7UaliaZDV4bUeNGqWH8FLfvbwJ26XwjMYVZ5/pgUDGUEwCb7+w4BpvyvAF5R7KEIo+2MZ/BOCqNusU3n33Xd3vikYCJEACJEACJJC4BFq3bq1htfDYQThiKQ6ey+DlRAZWREhhj2+cM4bQW4gylIWAQ6g8QkhLliypL7SxNApJfZDpFkIW2VwHDhyYah1jpIhv2rRJhTDEIoQy1mSaLLRmDJgbjkNszpkzR72g+BlbsCxdutTjUCEysV8nPuAAD7HVzO922W49NsoTJEACLgIh8XDizRLe+mDbE/eMZmQdHgJ4o9e4cWPB5st4K+e+qXF4emWrJEACJEACJEACsUoAnkhP3k27MSNqCl5RfNwN3lAINhO66n7e+jv2XPdkns6NGzfOtsq3336b6jhCebHzwdy5c6VWrVry9ttva5ZaYwgjhpnkbQgLRmJFeEKxZyiSWbZr1y5NokVTH/UqV64syIsBQ8ZbJD6xmtn7kx7OVFj4Cwk4JhC04Fy0aJGKHoQf4O0aLXIEbr31Vv0iRYpurKUoUaJE5DpnTyRAAiRAAiRAAiQQZgJYolW3bl2N7LKuPzXdZs+eXRD2C1FpNeQTwQeC1FvkHTy8SEpkDOs/4eG1GsJ1sY4Ue3fSSIAE/CcQtOBEyAUM3k33mHf/h8Ma/hBAkgB8SSJsBJnaGjVq5E91liUBEiABEiABEiCBmCeANZmeDB5NJA7yZN7EJupgyxSrYSsZd0MbyGhLIwESCIxAUGs4d+zYIfPmzZPMmTNL8+bNAxsBawVFAG/b8PYPotNu35ugGmdlEiABEiABEiABEiABEiABEgiCQFAeTsTZIz22Sb0dxDj8qoo3Wdh+BQmKrHH8EMCDBg3SBd9YCN+hQwfH7SLkYuzYsbJ8+XJN/Y01kdgU+MCBA4LMbfXq1XPcViQLIowWqb+R7nzWrFmCMFsaCZAACZAACZAACZAACZAACcQCgaA8nMjmBUPymmhbcnKyDB48WMVmkyZNNLOaP4Y9mbAeFQvoke67ePHi/lSPalmk/IZhny0aCZAACZAACZAACZAACZAACcQKgYAF54YNG2Tbtm2CjXGrVasW1fkgnTXEJlJ2I/Y+kH1A0QasUqVKcsMNN8SV4ESacghlCGZshkwjARIgARIgARIgARIgARIggVggEHBILTyCMKSoxj5P0TKkqn7rrbdk7969UqVKFd3w13082D9pypQpKsggSrHAHMl2kFUX6x+HDBkiK1as0CksW7ZM7rvvPt2vyt327dun+0+hT4T1Yu6+2nZvIxy/I0Mb5o6wWmQMvv7668PRDdskARIgARIgARIgARIgARIgAb8IBKwUIWxgNWvW9KvDUBbG3knDhw+XrVu36kbGDz74oCYwcjfswzR79mzJkyePtGjRQlNkT506VY/B4CGsWLGi/ozMr1j/6b7FCETmsGHDNGQXa0MhNmG+2tZCETBzHcx1iUCX7IIESIAESIAESIAESIAESIAEvBIISHAiqQ6S68CwyXC07KuvvpLVq1dr9xCI8PS5GzyQu3fv1vNdunTRpDrXXnutFlu8eLH+98orr3Tt7YRyEJRly5Z1NYX5jhkzRnbt2qV7MF111VV6zknbrkbC/IMJa4aHNl4sd+7cAQ/V/YWAPw0F068//bAsCZAACZAACZAACZAACSQ6gSSIKF+GB3RrOfyMLTgQmopPtAzrLiF4161bJwjxhZcPGXOtljVrVhkwYIAeQkbdM2fOiBEcJ06ccDT0adOmyebNm6VAgQKpkhGFom1HA3BQqFSpUrqOE97ejRs32opvT824X19P5eyO+1M3GJFo13e0jjn5m7Ebmz+s7OoH2q9dWzwWWgKIgIAFc40CrRvMfRWtusGwCmbMob3qbI0ESIAESIAESMBKYP/+/ZIjR440UJKciACIS2u5lStXakPlypVL02AkD1xxxRVy9913y+effy4zZsyQiRMnamhs0aJFUw0D2Vt/+OEHQSZbq8Fz6cQgNrHW8+DBg7rWs3bt2q5qwbbtpH8nZSA2ITq3bNmiW8aYEGEndd2vr5M6pkwwdf3pJ5bKOvmbsRtvMKwgRgLt124sPBZaAtmyZdMGA71GwVzfYO6raNWN1nxDe9XZGgmQAAmQAAmQgJVA4cKFbZ+FAgqpRXZaWLS3DkFGWQhBhMkiBBYhriNHjhSs7TS2dOlS+fTTTzVZEJIB9e/fX1q1auXX3YE1nR07dtQ62JvTtB+Ktv0aiI/C5nqY6+OjOE+TAAmQAAmQAAmQAAmQAAmQQFgJBCQ4t2/froMqUqRIWAfntPFMmTJJjx49BCGuEFuTJ092VYV3EgbPA8Jt4fk7dOiQHnPq4cT6yGbNmqnnFNlwTbKhULTtdI5OypnrgbDaRDesw23QoIGMGDHCbxRIDPXSSy9pfXx+/vlnv9sItAK86NYXJoG2w3okQAIkQAIkQAIkQAIkEAsEAhKc2B4EhjWNsWIQgxAZMITPLlmyRH824bUQyRCio0ePFsQXwzMK8YjEQ04MW63cfvvtWvSbb75Rj2mo2nbSv5MyyLALM9fHSZ1Il8FaN2xJ89RTT4W164svvlhfElSoUMGvfv744w9p166dbqMTDfv66681qdXzzz8vc+fO1YzKNBIgARIgARIgARIgARKIVwIBCU6TbMcuK2w0QUDIwCMFGzdunHoyGzduLM2bN1fvJx7gYQ888IAeg4hcsGCB4yHXq1dP97uEaMK60VC27XgQXgpi2xfYgQMHvJSK7qk5c+bo1jLhtkcffVTefPNNueGGG/zq6tVXX9XrC8EXLUMyrG+//Vb69u2rW/RAnM+fP19OnToVrSGxXxIgARIgARIgARIgARIIiEBSILWiLTiHDh3qcdi9e/dOc65Tp06Cj9XuvPNOwccY1nW6r+187bXX0rT1xBNPpDrmpO00jYTpgMm+e/jw4TD1EFyzYGW2sUGyJXwGDhwoLVu21IaRaXj8+PGCpFRYj4s1qdiCBmtvTcarW265RcOmH374YX2hgAzCmC9eBDz55JNSo0YNbQvebmQvRl3rPYHkUh999JFm8sULB2Q27t69u+tFBfZphYcTL1NMduPgZh1cbfytGVZDhgyRpk2bKhO8XMmZM2dwjbM2CZCALYGHHnpIfvnlF9tzPEgCJEACJEACiUoAz6HedJgnLkEJTpOZ0VPjPB5ZAlmyZNEOY9UTduONN6p3E2tMkeQJosmEvMKj98ILL+i62ksuuUTXB8Mj/cEHHwjCXN977z3B/MwcIUwhLpGlGKITIrVPnz4aIp03b15b8EgehZcIWPMLzyGy+cJz+Ndff+laT4ThduvWTevGYigrRDjCxfEBh0aNGum+sDQSIIHQEqDYDC1PtkYCJEACJJA+CAT672NAghMP6rBYC6lNH5cy8FkgbBgGYWJCiwNvLfQ1Fy1aJMuWLVPBif1TH3nkEe0E4g7hrxCb8IKa40jKBG/jqlWrZObMmdK6dWv1SsLgzYXHD78jbBaeSYSiwhto1tpaZwAmJoEQPJ5dunTR0xC5aBvCFoLTl2FdaCwYmOGPPtA//FiYA8dAArFOAN9ZNBIgARIgARIgAQlKWwS0htOswaOHk7dfKAggzBZiEQbhaKx8+fJSuXJl/XXhwoWu4/gBGYeN+ETyKrPvqAnZTVU45Zc1a9aoRxOGcABjEJxYxzt8+HD3KvydBEiABEiABEiABEiABEggSAIBeThz5cqlD+9IrkIvZ5BXIEzV/Xkzj83fzfpPf4cTTF3Tl9mmBr/ny5cv1RDM70aQmpMmQZL53dyHRlS6z8PaB+7fQA1Jj8LJCp7WYcOG+RyeNaQ2Ftaa+hwwC5AACZAACZAACZAACSQkgYAEJ5KV4MEeawUpOGPnvsELAFi8XZP8+fO7IEIYFitWzPW7SYDkvgWPe2Ik87snMWgVqNjSxvSBUFvcy9gmx72P2LmyF0aCkGm7pEEUnLF2pTgeEiABEiABEiABEiABQyCgkFrjIYrV5DSJenkhnmCxLDgh7GAm0zF+rl69uivRD7LIGkMm2fXr1+uvCKG12rx583StKgxrQvGBoS07w3GT6dZsj4NyWDt63XXXCbJSxqLh5Q7Ghwy8SBaEpEdYs8oMtbF4tTgmEiABEiABEiABEiABdwIBezjREAWnO87o/o7wVph7WGp0R5W6d+PNxBYo2OsSYuqyyy7TREFYT4ktS3bs2KFzQPjqv//+69rv1NoSjiNDbZ06dQTiEwmH4KG8/vrrbacLEY7tT9566y0ZM2aMClR4hCE+sRa0Z8+eWu/pp59WjyfaM4by2HcV2W0j4U2EN/aKK67Q7U+aNGmiGWl37doV0y8SbKHzIAmQAAmQAAmQAAmQQMITiIrghDfJfa1d5syZpUSJErpdhbs3K9RXCeJh+vTpuq1Ejx49Qt181Noz6xxjOTS0Y8eOug0JPJcQitgCBYYMtBCjH374oW6DcubMGSlVqpTupwlhaRIEGbjYYgXHvvjiC/WW1qtXT7BHqqeQWtS76667tI+PP/5YfvzxRxWQ9evX1706GzdurE0jgRBCbq2GLVdg7mNIVShEv9x0002aqTcpKaA/zRCNgs2QAAmQAAmQAAmQAAmQQGgIJBmvmK/mrOUKFiyoxQ8cOOCrmtfz8OSYTLcQS/A6Yb9FZMGF8IxXO3jwoDz++ONyxx13yLXXXhuxaezfv1/7wvVxel3N4Pwtb52U07oQgyVLllTBZ2dYn2jNIGtXxhxDaG6vXr30Y2eTJk2yOyytWrXSjyeDEPVmmKvT+dq146suXrx4ihzwVdeuPx6LDIGzZ89qR8FcI9Z1fq2CYeW8F5YkgfRLoHPnzrJixQpHE3zqqaekbdu2jspGqhCesbDMBEu8rMtkItU/+yEBErAnACeQ3b/RSd48QqYpVLSWw3YVsL1799r35vAovsAQTgnDAxvEJrxb3333nUfBiVBHsw7QYTcRL/bnn3+mCskMdAD+znXfvn3aFbYScXJdzbjcr68/4w2mrj/9xFJZf9haxx0Mq2DqxhK79DoW45GOt3sjmPsqHuum1/uP8yIBEiABEiCBWCCAHCN2z0IBxe2VK1dO54R1ZaEyPLBhzRoEJ7yd+MAD+vDDD6tSxhq/KVOm6Pq+0aNHa7dYB/j999/L7t27VYRiXAi1rFmzpmtY8BZhXeDixYs1hBIeNDvBirBKGNYVlilTRn/2FHo7e/ZsXV8IjyIS0TRo0EBuu+02XWP3v//9z5XA5pNPPhF8RowYIfBcISHOzz//rJ5hrFHEfLHm0IzH21xdE/Lyg7kepUuX9lKKp0iABEiABEiABBKZwDvvvKMv+o3hOQVLVGB4+W+e8/C7SbiXyLw4dxIggeAIBCQ4q1atqr1u2bIluN7dap87d851BOIQZjwHX375pa7VK1u2rB6fOXOmTJ48Wc9D8CFj6dKlS2XdunXywAMPaDIZGPY1XLhwoYZdYJ3ehg0bVCgGahjHt99+q1lCsf4QmVR/+ukn2blzp64hxDEIZITVVqlSRcUr5oKxzpo1SwoXLqzrFbGO8bPPPlNPaIsWLXQ4nubqZKz//POPvgBAX/BwplfzFCqbXufLeZEACZAACZBAqAm470eN5HTG4J2wSz6I55px48bpi3NEVOGZBRFvLVu2lNtvv12fP4zdf//9mhMB5wcNGqT7S+O5ByIXORf69evnep4zdfxp3xMPf9uAIwBz2r59u+Z4wPMZkvYhdwQMmeybNWumCQVRFrkc4Oiwbuf26aefagZ52PDhwzXZH40ESCA1gYAEZ/HixfWPDXsmJicnS6FChYLmii8heA5hRYsWdW37YBK14IvtlVde0T92eC2nTp2qZe+55x5X4hmIOghReEIhOOElXbRokZbr2rWrXHTRRQJR+8wzz9jGF2tBLwbBa7btQMbTWrVq6VggNDdt2qRiFllXly1bpoITCWmwhhMCFGsNYEhShC/g5s2by6OPPirTpk1TLyfmZTdXL8NJdWrbtm2a0RUvA7BfI40ESIAESIAESIAEQkEAL9XvvfdefebDs0q1atX02QbJL0nHAAAgAElEQVRJ9fD5/fffVZyZ5xjzHIKILuRawDPZ5Zdfrs95EKJ4FkIUmRG+/rZvNyd/20DOBghJGAR3kSJFNCoNkXbGEJ0Gu/XWW/X5D89ZqIeoNmNmDSnqmwSErpP8gQRIQAkEtA8nKhoP4po1awJGiS8bLEbHB5lr8fYL4aXWP2TTODyH5osMXkV4NFEW3k1jF198sf6IsFskHsIbK7MO0uzPiDdwEJ6BGEQlhDHGYdpDGO3bb78to0aNkkqVKtk2i3r4kkI9vDnEFza25IC304zTWtE6V9sGbQ6uXr1aj9auXdvmbGwewj9WgVow4dzB9BvoeFmPBEiABEiABOKVAF7449kFwgyRYxMmTJCvvvpKX/rDkHUe2f+NGW8nXvwjO/3rr78uL774oj7vwRBphvrG/G3fVdHyg79t4LkNhjkhmSHmBWeGNQrOLHnCs6ZZboVoNWN4njCODXh6zXOq3fh4jAQSmUDAgtNsZ2G2jAgEIr6IEJaBDzyPFSpUkAcffDCViDTt5s2b19WF2VIFb9DM2yectK4zQBmT7RNlrNtMQCQGYvBwwvDlZA0d8dUWRCUMohPeUPPB2lOYe7Zf61x9tW3Om+tgrovTeixHAiRAAiRAAiRAAp4IYKsw5MyAXXnllanyZMDraUSWXZZ3nEO4rbEbbrjBVd4ItWDaN+3628bhw4c1Kg0Gz6tJholQ4jZt2rjGa/3hlltu0V8xbkT4webPn+9aC4ttzWgkQAL2BAIKqUVTJkYdabXh9bMKOvuu0h7FF5XJUpv2bOoj1kQ/JgQDXk5r30aIoiw8iWbLFezpaC3nzcNlXUdqhKIZiRG0WC+JckZ0QoiifQhZ6zoIUw/rPWFg1LNnzzRTtS7Ox0m7pEZpKlkOQLjD6wth3bBhQ29FeY4ESIAESIAESIAEHBMw0WKoYPJomMp4LkK0FnYtQDl3g4Azz0A4B0cBjmHZkcmsH0z7pj9/27DusmA8l6YtIz7d54It1UyyJRNWiwSSMETOubNxr8/fSSCRCQTs4SxVqpSuF4Qoc7qXU6hAV6xYUYUdwmWRfdaYeVsGAQfxh2ytEG8oZ8Zokgu5j8WISZMICaISazGtBg8sRCY8lcajiPb69+8vffv2lbVr12pxIxhxDobx4C0fRCnWp2LBfN26dTUsGMeDzQCHeWNM8G5av9hTDZ6/kAAJkAAJkAAJkECYCNiFk1pf4ptuzTF/X67bte/vVEwbeC405j4O6zlr+wUKFJBmKQmEYEgWiXlgPSoMyYZoJEACngkE7OFEk0iQA5GFPzgIqEgZxCT+uJHCGzH3EH/wMi5ZskQFoQnfQGgq1jQiey3SfGONJ9ZT2nlj8XYKi96xrhRrQOExxLYsJmwCc4Nn9eqrr9YMZWPGjHG1B88qxKjZjsXsP4PF8QiXRXgGvqTwRmzw4MEaMozF7Vh3iTdpga4pNbx//fVX/RGhKjQSIAESIAESIAESCBUBeADNy/vNmzenahbPP2bNo3u0Fgoi1BXeTIg18zuOwYoVK6b/DaZ9bSCANuCVNYaki1Zzn6P1HJIH4dkOux8gzBjzhwMEyR9pJEACngkE7OFEkwgvQBgnvIz4QomkYXE2FqsjKxj+6CHeatSoIY8//rh6Xo116dJFExwhrBaCFN5F84YKx4y1b99es87CC4lyyDSGuH4YvJ3G2rVrp0mNID4Ru49wVqxpwD6h5s0ZhB/GhS+i5cuXq4e1Q4cOcvPNN6sghvBE+Af2BLXWc3Xixw/4YoSIxniQ+ZZGAiRAAiRAAiRAAqEigJfvl156qTaHLVFMNBeebbAvOiKsYHguszO88Dc2ceJE18+NGjXSn4NtP5A2ChYs6AqBxZxMdBsSI2H7O0+GMZcsWVKfKRFeC8Ozl/s2M57q8zgJJCqBoDyc2A4FHj+kisYbH4gxJzZ06FAnxbSM2dvIrgIEGz7eDF9kSETkbmbvS3Mc5SD+3M1dxOEtH75UPX2xoj7e1iFbmrthQbm3ReXe5urelvndbCWD7Ve4HYonSjxOAiRAAiRAAiQQKAEkOzTbomCPSrzYRwSYyRiPSC7sX+luiDSDoEMkHKLLED0Gw7Is6/NQoO1b+/O3jfvuu0+ee+45Xd4EpwD2MMdLfESeWdd4WvvAMyDmCrFphDfDad2vOn8ngbQEgvJworlOnTppqAW8dtbw07Rd8UioCSAsF2HACOfwJmRD3S/bIwESIAESIAESSBwC8Oph6xBEgyEXxbp16zRcFvuNDxw4UJ599lmPMEaMGKEv4vHMgpwVV111lXpGTWJHVAymfdOxv23ceOONuk0LxC+8tchc27lzZ/0Ys1s3iuctkzSSe296vOw8QQKpCATl4URL2I8SXk542hCGgDdgtMgQ+Oyzz/RLEiG+8DbTSIAESIAESIAESMBfAo899pjg480QhtqvXz/9ODUk1oGge+utt3xW8ad9TxFh/rSBAbVt21Y/VsNenMZMTg7reThZTKIhLC2zE6U+J8sCJJBgBIL2cIJXnz591MuG5DVYS0kLPwGEp2B9KEKBKfLDz5s9kAAJkAAJkAAJpB8C8LJ27NhR85GYPCRYjzp9+nSdJNZlIszWajg/ZMgQzfeBZUx33HFH+gHCmZBAGAkkeduT0tqvt3L58+cXxPSPHTtWs8Y+88wzug8mLTwEkBFu0qRJ2njv3r01cdPff/8t3q6Rr5Gwri9C/52PR1bOZ8eSgRDAwwcsHu+NRBtzINeXdUiABNIfAewsgB0HICKxuwF2DEDG2q1bt+pkkf/D7K2OMvCE4vvSiFOsAWV0Wfq7Lzij4Ahg1xC754okJ8IQFX2V6969u/zxxx+6d+WoUaN0X0qGGQR30exqY3H78OHDdRsYZNs1W8A4uUZ27eEY63oik/Z4PLJKOwseCTUBs9WSr+9JT/3G430Vj2P2xJ/HSYAEEo/AZZddJiNHjpQPP/xQI8aw8wC8mtjT/M4773Rl5jVkkCAJLxexpQo8m9gFgUYCJJCaQM6cOW01Y9BrOE03WEA9aNAgXWyNsFqIzm7dutnuecmLExgBiE1k+MU+ociiNmDAgMAaYi0SIAESIAESIAESCBMBT2ssw9RdwM1iX3R8fBkcKNiCj0YCJBAYgZCs4TRdI1vXG2+8ocoWm+IibfTJkycDGxlrpSKAbHCDBw/WNNzgjDUE3PeJNwkJkAAJkAAJkAAJkAAJkEAsEwip4MREEROPEAXsvYTwWnjhNmzYEMsMYn5sVo7FixfXtbKlS5eO+XFzgCRAAiRAAiRAAiRAAiRAAolNIOSCEzirVasmEyZMkBo1akhycrK8+uqr8u6777oWYic2cmezx3Yn8GbCk4kwWng4GzZsqFyx1xSNBEiABEiABEiABEiABEiABGKdQMjWcLpPFKLovffeU28n9otEiC0+2I8JXtAKFSoI9kvC4lKzn5F7G4n0OzKgIREQMtBu3LhRF7Dv27dPESBEuWvXrpq+m4mYEumu4FxJgARIgARIgARIgARIIL4JhE1wAgvSSd9zzz0qlOCZmzZtmia8wYfmm0CxYsWkdevW0r59e8mXL5/vCixBAiRAAiRAAiRAAiRAAiRAAjFEIKyC08wT+xQ98sgj8sADD6iXE2sSkcn2wIEDGiqK8FE7g9cvUI/euXPnBJlzA7Fg+g20LuaJJEAQmQhFrlOnjtSrVy/g+Qcyb9YhARIgARIgARIgARIgARIggVASiIjgNAPGXnXY3wgfJxbMPm/YL6lEiRJOuklTJph+o1U3zSR4gARCQKBXr166vy4M/7W+xMGLIqzP/vzzz/V8u3bt5PHHHw8oRP6LL76Q8ePHy+7duyVz5swycOBAmTFjhvzwww/6Imbu3LkhmA2bIIHQEnjooYfkl19+CW2jbC1oAlimg30U8aI7kY33Z3xf/QIFCmiSyLJly8b3RP5/9LwfY/MyRur7MqKCMzZRc1QkQAL+EnAXmx06dJDHHnvM32a0PNYqv/LKKxrpUKtWLWnZsqWu8aaRQKwToNiMzSuE7xLumSh8GRKbt6fjUR08eFCjAdOL4OT3peNLH9GCkfq+pOCM6GVlZyQQ/wTcxWanTp2C8iQgtN6E1bdp00ZuueWW+IfEGSQUgYsXXZxQ843lyZ7acEpW3rEylocY8bHx/ow48qA73PT0Jjk442DQ7cRiA7wfY+eqRPL7koIzdq47R0ICMU/AXWx26dJF12bb2ezZs2Xy5MmyZs0a+fvvv6Vw4cLSvHlzQZguslPDEIKLsFljL774ouCDkFo7O3r0qKDPrVu3StWqVTXcKEeOHFrUSX92bfIYCZAACZAACZAACZBA+AhQcIaPLVsmgXRFwF1sYqseiEc7mzJlirz00kt6CmGySBw2f/58mTRpkm77g315YZUrV5Y9e/bIypUXPBLly5dXYYry7nbmzBl59NFHVWxi26Xhw4e7xKbT/tzb5O8kQAIkQAIkQAIkQALhJZAxvM2zdRIggfRCwJogqHHjxh7FJuY7ffp0KV68uDRo0EA++OADefPNN3UvWRiSD23ZskV/7tatmzz55JP6MwzhuRCjjRo1ch0zPwwYMEAWL14s+fPnV7GJhArGnPaXplEeIAESIAESIAESIAESCCuBJGRVdWJOy9m1xbp2VOyPkZU9F7ujZGVHJXzHvvzyS1fjEI1z5syRZs2a2XY4ZswYPX727Fk5fPiwYLsgeC6N7d27V8qVK2db1+4gRChEZbZs2WTo0KFSpkyZVMVC3Z/dGLwdwzxhwdyTEydO1P2K+/fvL/Xr1/fWXZpzwfQbybp4YfDyyy9rRmN8ArVgxhxon6xHAiRAAiRAAiTgncCJEydsn4WScufO7b1myln84+6knF1DrGtHxf4YWdlzsTtKVnZUwnsM4a79+vWTZ555RpA979lnn5UPP/zQNqPs0qVL5e2335bly5cL9sR1N7tj7mXM7/jywlpNGMJqs2bNmqZoKPtL07iDA9jyCRbo9+Qnn3wio0aN0uRJ2Kf4yiuvdNDrhSLx9LewefNmSU5OVi82WAUiOoOZr2OoLEgCJEACJEACJOA3AeTosHsWYkit3yhZgQQSkwDEJUJpBw0apPtxnjx5UtdUunubsM1Jnz59ZMmSJVK6dGlBKOywYcNcIbX+0oMIq1ixohQtWlTFK9aGmqy2aCvU/fk7vmDLI7GSEZvBthUv9XH9XnvtNU0qRSMBEiABEiABEkjfBCg40/f15exIIGQEEM4KQ7jnww8/rD9v27ZNnn76aQ2ZNbZgwQI5deqU/oqkQq1atZJLL71U114GYshCi3DTvn37anV4AJEkyFio+wtkjIHWgeCC8IJVqVIl0Gbirp7ZV46iM+4uHQdMAiRAAiRAAn4ToOD0GxkrkAAJdOzYUa6//noFgeyz77zzjguKVXxiGxMYvKCffvqpq4wRpK4DXn7ImDGjZMmSRa655hpp2LChloTHFGG9sFD352UoIT1lFZvYHsbwDGknMdoYtsfBnGEUnTF6kTgsEiABEiABEggRAQrOEIFkMySQaASwhhOhrjBkop01a5b+jAyzZk3jkCFDdN1n27ZtpXbt2q7tTrC+E15Lfw1tIZwXAhaZb8Pdn7/jc1reXWwGspbRaV+xWg5zpuiM1avDcZEACZAACZBA6AhQcIaOJVsigYQikD17dhV9uXLl0nm/8MILsm7dOt0jE+s8K1SoIKdPnxYk9EFY7XPPPadrO1Ee6y4PHDjgNy8I3DvuuEPrzZgxQ37//few9uf3AB1UoNj8DxJFp4MbhkVIgARIgARIIM4JXEitGOeT4PBJgATCQwDZRL0ZkgLNnTs3TRFsl2K3ZcpNN90k+FitRo0asmjRojRtmLWN7ieQqAgfq/nTn3t7kfydYjMtbePdxfU21zwRPb5pyfAICZAACZAACaQPAvRwpo/ryFmQAAnEOAGKTc8XiJ5Oz2x4hgRIgARIgATinQAFZ7xfQY6fBEgg5glQbPq+RBSdvhmxBAmQAAmQAAnEIwEKzni8ahwzCZBA3BCg2HR+qSg6nbNiSRIgARIgARKIFwIUnPFypThOEiCBuCNAsen/JaPo9J8Za5AACZAACZBALBNg0qBYvjocGwmQQNwSCFRsfvPNN5p916mdO3dOt4oJxCJd12lmYiYSCuRqsg4JkAAJkAAJxCYBCs7YvC4cFQmQQBwTCERsFilSRGcMUeZUmMUrovLly/scOkWnT0QsQAIkQAIkQAJxQYCCMy4uEwdJArFLYPbs2ZKUlKTboKxdu1ZWr16tW59kzBh8xP7Ro0clT548cvLkSYGIgwjJkSOHC8bLL78sVapUkTZt2ugYYsECEZsYd8uWLaVmzZo61/RsuH5ly5Z1NEU70dmiRQtHdVmIBNIDgT179kixYsXSw1Q4hzgncOLECZ1Bzpw543wmHH40CCTt2rXLZ7+5c+cWJ+XsGopWXYwl3sYcDCvO1+7usz8WDOdo1Q3m+tpTCM3R06dPC0TfkSNHpFevXnLppZfKoEGDZN68efLGG284Fp3vvfee/PPPP5IrVy7XwM6fPy843rRpU+nXr59MnTpVpkyZIkOGDJGKFSuqMMPvGTJkkMqVK0udOnVCM6kAWvn777+11pgxY2TUqFH68+OPP64C2R9zKsT8aTPey7qLTrC+5ppr4n1aHD8JOCLQqlUrwV7FV111lVx99dWCvY9pJBANAuvXr9d/5xs1aqT34pVXXil58+aNxlDYZwwT2L9/fyrHgBlqUokSJXwO+9ixY+KknF1D0aoLsRlvYw6GFedrd/fZHwuGc7TqBnN97SmE5uiXX36pYrN169bSvn17FYydO3dW4bV8+XKXCFy3bp089thjMnDgQFthmC1bNhk7dqx+SR0+fFjbwc/Hjx9X8dqhQwcVsB07dpQePXqo0FyyZIlAlKLdaIpNkMT4wSIYsRmaK5I+W7GKzrffflt5+yvmY5HM6V2nZXnr5ZK7QW6pOrqqDvH8mfOyod8GOfLzESn1cCkpdpd371byN8myY8gO+feff6XUg6Vk26Btkq9ZPqn0ZiW/pnxi1QnZ+c5OObHihPx78l/JlC+T5L00r5TuW1qS8kYmeuDEyhNycu1JKXxrYb/Gnp4L4ztu5cqV+hk2bJi+XMPDPgQoXryFy2LhfgjX3OzaNX+L1nMZsmSQ7OWzS4nuJfRvypedOXBGll63NNXfX3q7p/Fi+JdfftEPcgc0bNhQ70dEOBUoUMAXorCdj5XvUt5HIoULF7bVX5H5VyRstxgbJgESiBaBgwcPysiRI7V7iL97771Xfz516pT+F+LShNXijRfCY++//36ZNGmSlCpVSssYu/POOwWfpUuXajvdunWTTp06SYMGDaRx48b6DxservAP28yZM2Xfvn3yww8/SKFChQQegFWrVqkXIFq2e/dugRCCBeLZjNa446lfd08nxp4eRKf1Gpw/e142PrHRsdhE3eQvk+XskbNS/+f6cu7UORWc/hoE5ro+6yRDyv/wcJ25YGY5PPewHPj2gPz7979ScVD4hI11rLvf2y3/7PuHgtPLBYSXCR989yIiAt5+fC9WrXrhhYWXqo5Pxcr94HjAISyYrWw2KXb3hZc8/+z9R/aM36N/kxd9fZFkKZrF757S8z2NpHO//fabfl555RWpV6+evghp3ry5FC1a1G9WoawQre9SMwfeR2mvJgVnWiY8QgIk4IPAv//+K88884zA44uQVjzwGPviiy/0TSfCbWAIgfzkk090LSYEgjVsFuchHI1Xc8OGDVoH/4WwhP30008yZ84cfaDKnz+/HoPA/P777+Wyyy6TAQMG6PnXX39d37JGwzZu3KgcKDbDS99ddAaanTe8owys9fPnzsumpzap0HP3bB6afUh2jtgpp3eclsyFMkuxe4pJkduLyOrOq9UjCVt8+WKtZ7UjvxyRDY9skIKtCkq558uJp3ZO7zwt546ek/zX5Jeid154UCxwXQHJ0ziPZC2dVZv8Z88/suzGZZL/6vySIXMGOTznsGTKnUk9oCgLO7XhlGwfsl2OLzkuKdpVctXOpeezV8qunstVHVdJ4dsKS9n+F9bwru2+Vo4tOib1F9SXVe1Xyd9bL4SmL2ywUOp8X0eFL80zga1bt+qyA3xKlizp8nzWqlVLv48CNSf3A9o+vvS4Xu+Ta05K5vwp9+W9F+5LCLVlLZdJ4VsKS8ZsGWX/1P2SKVvKvfJYyr1y/YV75eCMg7Lj7R1y9uhZKdiyoKAO7td68+rpfe7tXsmYJaPHvjEueBW3v7ld4KXNlDOT3v+lHiglGZIyeK2Huvj7KtSmkAvd6e2n5cD0AzomCE5v97g77xW3rkiYexrPBIsWLdIPopFwD5owcNybkbRofpeaefI+SnvFKTjTMuEREiABLwQQ4gXvJbbuwPoNhNQuXLjQVQPrOs+cOeM6BlEKw3+rVasm+fKlDk2Cp/TVV19N1SO2BsHHGPpcs2aN63eITBjEqDEI12gJTowBnob05nFzwY2hH8B48eLFMmvWLFcIcwwNL6Ch6ANS/01y6MdDUrJXyVRhtHgQ3/T0JslRJYdUn1BddgzdIdte3Sa56uSScs+VU5F6auMpqf5BdcmYI6PseGuHjuHU+lOy8amNkueSPFL2mbL6QO+pHbyNTyqQpP2jTJ6GebR964M3RCYMQrPCyxXUCwQxu+WFLZKnUR59mF/bc21KTLCouMV/t76yVdb1XicXTb3IJ5cKr1aQ1Xevlqwls0r5F8qHJIwXERKJYjt37pTx48frB94leJkCtaxlsvq8H84cPCPr718vmYtkluofVpeD3x/U+zJ7heySrVw27frgrINSvGtxvZ6bn9ssW1/aqi8sEHq6+YXNeo0rvpKyHn/9SUn+KlnrmPvM29i99Z2jcg5Zd/86yZQjk1R6vZIc++uY7Plwj2TKlUlfdngac5biF7yXCGnH+GBn9p+R48uPS1L+JMlRLYecO37Or3s8VPd0vN3H+PcaS2rwGTp0qP67H6l199H+LsV9BovF+8jb31QkzlFwRoIy+yCBdEIAQvKFF17Qh/1nn31Wfv75Z5k7d26qcNYtW7ZoxlgT4orMdngTj3WWdms8br/9dhWK8F5OmDBBhg8fLh9++KFUr15dkxPgLSkEKf4RQ6IgeErxDzC8qq+99lrMkEW2XpNJN2YGlQ4HAsZgDQ8O1vMiaVW8GzyCGTJdEHTwFkGswUMIgxex+vjqkrlAZslcOLPkvTyvHP39qPy96W8pcEMByZj9QjbonBfl/O9BOeWBef1D6yVLoSwaDou2vbUDMVttbDXZNWqXHJl/ROB9gkH8lXmijOS97L/EIDlr5VRPKAzeKoQc4qEeYZhnD52VEj1LuDye8DDtnbhXjiw4om15M4wBc8Z8MBda9AhkzJrR5/2ANcbnTp6T4jcXlxxVc+hax70T9srB6QelRK8LuUHgHTdrkA9MO6AvKxAyDa82HsghAHE/44PwbePh9jVzb33DEw9vPV6IoN08l6W8PEnxtCflS9JQdU9jhncWdnzZcV2HaQzCtUz/MuopPfDdAa/3OF7SWI33tK8rGfrz0f4uzVn7wncX76O015aCMy0THiEBEvBAAJ5MvLUcPXq01K1bVxP6wKz7RmJdh/UY3rzDNm3alMa7qSdSDIvMYSazdLly5XTdpjHzM8Sm1SBCkbUWobVY6xktw/pSzM8IYHo6w3Ml3Lecue2229KF4EToaJV3qsiusbs07HX3uN1S/L7iChFrkbAODCLz39P/iqT8X4//C1VqbyeWnxAkPMH/4A3KmiOrz3bg5YTnEmIXD/6Hfz4su97dJRuf3Ch1Z9V1dQRvjzE8xMPOHTknZw+f1Z+zFPlvnVuWwhd+PpOcMgYfgtPVaAh/QHhfvJtT75ZdSC2WMgRqvu4HvFyA7Xx3p+wafWG3A3iX/t52ISwa56xrHjNl///v85R/Hsy9grBDY1mKZXEsOL31nbXUhRcbeEEDy5Axgyvhj4Z6p5i3MSP8u9RDF0LTz/9zXl++bH5ms475/OkLf3Oe7nHXZEL8Q6zcx8jVcN999/mcHV4G2oXU4mVyuC0Wvksxx1i8j8LN3lf7FJy+CPE8CZCAi0CTJk3k66+/dv1+9uyFhw4jMs0JCEFzDHvIIcQLnlCsy+zevXsqolj7cccdd6jAxJ5zSDTUp08fVxl4NRcsWCAvvfSSekFNIqI///xT62H9JLLWfv7551Hbr6548eKavAiJgyg6w/MH4y4205OoRwhi9srZNRQVa8R2jtwpOarn0Cyxe8fvlUM/HJIy/cpIkXZFZM/EPRpW683gaYFncnWn1ZpEqPKwyl7bgZhFSGSh1oUkV91cGhJZrFwxObbwmK6rQ4gh1uLBEJprDN4qGISnCYWEh8l1/v/L4gHdeHDhCTWGkEVa4ATClTTIyf2AEGxY8S7FdQ2mMbzo8GVJuS/UNaGrKP/P7v/uG1/3ire+j/5xVLvHSw61FI247/N9usbUWz2IZRjCfPF3ZwyhtAgNPjTrkHpkYZ7ucVelBPwB/y7HQtKgaH+XmkvP+yjtHwEFZ1omPEICJOCQgNl/0j15C95wWo8hQy0MW5/UrFlTPZLG8A9Vz549dc0msi8iOZAJx0VyoIIFC8oll1wiV1xxhe7VmTlzZlmxYoUrtBYeAGyTEe3NqG+55RYdBwQnRafDG8hhMavYfPDBB9PtWlldd/ZGJVl19ypdS1ljQg3NEgs7d+KchvshZBH29+a/NYzVznTNWUqYY+HbC8u+T/ep19RbO3g4Sv46WY7MO6IP1aiP9o8uOKqeyazFs8qZQxce4LE2dO/He/X4wWkHNQQ2d/3cKbGwKQ/rKfX2Td6nfWObFrQJL1eeJnnUw6rJhuYfliO/HpGTq0/+Jwr+fxII5URyFoT15qqXS9fh0VITiMS2KEjK4+t+yNQ0k14frPvN3TC3XjeET52lshEAACAASURBVCOUFdfbm+VulFs9j8lTkiVnjZx6L5zefdpVBespvd0r+Zrm89h3vstTzqWEv+7/ImUvwBSxiKRa8MAiYqBo+6Ie6+WqfyEcFkLVrCfFPYuXPTC8AMp3ZT6v9zjWeLpber6nY2lbFHfu0fouxXcfjPeR+xVJ+fch7SEeIQESIAFnBCA44c2EEMQ/PkgghG1R8KbT6vWEGDQJfbAO1N2wHvPQoUO6JrR+/fouwTl//nxNQAQvJzLAGoMAgTB94okn9BDCfHPnTnnojbK5Z1HFcPzxxGGtK+aang37q8Iz49TcPZstWrRwWjUuy2Urn03KP19et2LY8OgGDXPFGkk8NONhptwL5WTLgC36cI8HfW9WsmdJDQlExs7Kb1f22k7lIZVl9/u7Zc9He+T83+fVa5n/2vxSsndKhskLzk3tCkmIkAV0x7Ad6jWCVzZTngvCsOq7VTVrKRIgScohCNHSj5YWPHRLSqQjvK47h+2UTU9u0q1P8jbNq55VrOeTlOhbCAIkeNn0zAWxTcGZEhKa8vIOL+BMxs/SpUt7u+QhOQex7+t+gLcQ9xSu97peKUl6UpKlYE0xMhafPXYh8sXTYLKWyCplny6r9xDuhYI3FlTP+rE/LySYg2D0dq946xseVh3X4O3694O2kHkZ2/0gsZWnMf+TfMHDinDyLQO3XBh6ym2LddBFOxSVkveXVC+/t3vcTnCmt3s6S5YsmlsB/2YjEz0SB8aqReO71Cwd4H2U9q6g4EzLhEdIgAQcEkByIHgr33zzTRWc27ZtE3j6IJrgzbRacnKywDtltjaxnkNY7UcffaSHsE+n1bAGdPXq1dK1a1dXOC3OI/x22rRpGlL7wQcf6NqS3r17p6objV8CFZ2YCxIxJYIhyzBCkH2Zu9gEW5P12FfdeDiPB++LF12cZqhIymM9XuOj1HvM1vj4v9+RIdYY1i9Z60EI1v3xv/WX3tpBGxCAvgwP7RVeSlnraWMIC64yoorNmQuHsE0GPlar8Mp/bSHhED60/wh8++23UVkqgHvB1/0AYYqEVu7mfh/ifPkXy+vHGDIgW7MgQ7Razde94qlvtAHxajcuPedhzJ7+FlMNKuUXb/e43bzT0z0N7zoStkU7msj9muB3T9cvGt+l1vvabqw4loj3EQWnp7uBx0mABNIQwLrJ559/XrPNmpBZeDXvvfdeLWu8l3v37pXOnTunqg/BCZH4wAMPqLi0vqlHcguIVRiy006cOFF/vvnmmwVt4YN+rbZy5cpUAg37csaC4MQYAxGd+/bt0+khhLhIkSKp5urtF3iS3UOavZW3not0XSSXwjw3b97sc4h2YtNnJRYggXRGAGvgaSQQCwRiUWjGAheOwRkBCk5nnFiKBEgghcDFF18sl19+uSBZEEJrjCGkFsmE4KmEHT58WL2cLVu2TFUO5yCOrHWR+W7YsGHStm1bQQitu5UvX15GjhwpuXKlrOn6/8y1sbgtivu4AxGdaKN169Yqyp0aPH6BhhNHui480bjWvoxi0xchnicBEiABEiCB+CFAwRk/14ojJYGoE8B6oqeeeirVOCAu+/Xrp8ceeugh3ej52muvFXggkdwH+3bCa+nJfvvtN7n++ut1jSY8mnZmXSfinhHXrnysHAtUdMbK+KMxDorNaFD33adduKDvWixBAs4IVHnXcyi2sxZYigRIIJYJUHDG8tXh2EggxgmYEFt4M19//XW56KKLVHBineY777wjvXr1krvuukuTC9x4442abRZJY6yGDLVW279/v4waNUoPIbute3kTthsvwpOi0/lNTLHpnBVLkgAJkAAJkEC8EEhymoDBaTm7ibOuHRX7Y2Rlz8XuKFnZUYnMsU2bNqkoRAIBhNk+99xzgo3HsUbPWJkyZXSt5sCBA2XOnDn6wRYoOI7yderUsR0sRCb264RByJ4+/V+6fBwzv9tlu7VtMAIHzX6knu5JZFZFRl8n+3QiPNlTO56m4m95azuRrOt+La3jcN/6BMw8jc3TcU98eJwESIAESIAESCD8BE6cOGH7b3eSk7U/+MfdSTm7abCuHRX7Y2Rlz8XuKFnZUQn/MWyB8thjj8ncuXOlVq1aKqCse2pCLMGMAMuXL59msIUn9P3335eFCxdqQp1q1arZDhb1kAlv/Pjxeh4Zb/HlZTWz92cseTiRrRfm7Xvy7rvvdrRPJ9a3emsnFYyUX+LpbyFr1pS9MWzMH89mMPO16ZqHSIAESIAESIAEQkQAyaXsnmEiElILjwW8G0uXLtXtDQ4ePKj79ZmH0xDNMS6bwUbxefLk0cyU2FcQ3iJscM9sYHF5OdP9oLGGs27dupqBtnbt2mnmmz17doGwct97smHDhoIP/uatCYPcG0DYLZISGcP6T3hOrYZwXawjxT5g8WYMr017xfwRm2lr8wgJkAAJkAAJkECsEwir4Fy7dq2MHj1afv31V4pLD3cCvDX4YKsAiPGvvvpK16xdc801utVEJDZ59jA0HiYBWwJYk+nJ4NFE4iBP5k1soo57dla7sFu0gYy28WoUnf9dOYrNeL2LOW4SIAESIAEScE4gLIITIU9DhgyRb775RrdJwLotJBOpWbOmVKxYUffwg6jy9fDpfBrxWxIeH4QMIlEKNrBftmyZrF+/XreYmD59urRv3173FiSr+L3GHDkJuBOwE53uZdL77xSb6f0Kc34kQAIkQAIkcIFAyAXnqlWr5Mknn5SdO3fqnnnY7uC6664TeD5oaQlASOKDMMEqVaoIEmXA2/ndd9/pnoQTJkyQP/74Q15++WUpV65c2gZ4hARIIC4JuItOrF1NFPvpp59k27ZtOl1sh+Megp0oHDhPEiABEiABEkgEAhlDOckFCxZIt27dVGxCHCE7JR4kKDb9o1ykSBG555575Nlnn5XixYsLQpPxO8Q8jQRIIP0QwPcjBBds3bp16WdiPmaydetWLUGx6QMUT5MACZAACZBAOiAQMsGJzdv79u2r6xGR9AZJPYoWLZoOEEVvCmXLllXRWa9ePd2PEHsarly5MnoDYs8kQAIhJwDR2aNHD0FCpkQxzJViM1GuNudJAiRAAiSQ6ARCIji3bNkiTzzxhCYGQrIbZKk02wQkOuBg549tBLCGExk+jx8/Lv369ZPk5ORgm2V9EiCBGCKA7LxYilC4cGG55JJLYmhkoR0K1vFjjnh5xjDa0LJlayRAAiRAAiQQqwSCFpzYyBueTYghiCIkuUmkN/WRuLBIutS1a1fdNmXv3r0q7pGMiUYCJJB+CCDz7owZM/R7NL0a5oY5Yq06jQRIgARIgARIIDEIBC04R4wYIViPU6pUKd3Gg2IzPDcOPMbwCiC50JIlS+Tjjz8OT0dslQRIgARIgARIgARIgARIgARCRCAowYlkNpMmTdJtTyA2uXVHiK6Kh2Zy584tnTt31rPvvvuu7N6920NJHiYBEiABEiABEiABEiABEiCB6BMISnAOHTpUzp07p+s2keCGFn4C2M+0cePGmpxp1KhR4e+QPZAACZAACZAACZAACZAACZBAgAQCFpyLFi2S33//XXLkyCGtW7cOsHtWC4TArbfeqnucTps2TZCwiUYCJEACJEACJEACJEACJEACsUggKdBBmTWE1113nYpOWuQIFCpUSC6//HKZM2eOruXs379/5DpnTyRAAiRAAqkILGywkERIIGYJ8P6M2UuTkAPj/ZiQl12Sjh075mjm1nK7du2SefPmSebMmaV58+aO6rNQaAlcffXVMnfuXPVy3nPPPdq402tpNxLWtaNifyweWdnPhEdDReDs2bPaVDzeG4k25lBdc7TTtGlT+eWXX0LZJNsKAQEkL0zP2ws5RcT70ymp2CxXoEABqV69emwOLoBR8X4MAFoEqoT6+/LEiRO2z0JJSETjy/BAYi33008/6bYcl156qeTKlctX9ZCcf+ihh3TrFSQnuuyyy1xt7tixQwYNGiQnT57UtaQdOnRw3B/2DR07dqwsX75czp8/L927d5dPPvlEDhw4IPfff7/Uq1fPcVuRLliiRAn9Ilq1apUsWLBA/3F1ci3txul+fe3KeDrGup7IpD0eLVZpR8IjoSZg9h3m36AzsunlbwF5DGgkEKsEeH/G6pVJzHHxfkyM654zZ05bPRLQGs6ZM2cqNSSviaYlJyfL4MGDVWw2adJE9wD1x3777TfBWlQ8LLZp00aKFy/uT/WolzVvcL///vuoj4UDIAESIAESIAESIAESIAESIAF3An4Lzg0bNsi2bdskb968Uq1aNff2Ivb70aNHVWweOXJE6tSpE9AeoGgDVqlSJbnhhhviTnDWr19fxTJEs5lLxC4AOyIBEiABEiABEiABEiABEiABHwT8ThoEryCsVq1auv9mNAxbgrz11luyd+9eqVKlivTq1SvNWE6fPi1TpkxRMQZRmi9fPk20g4y6iFceMmSIrFixQoe/bNky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YTfffDO3Q/EGiudIgARIgARIgARIgARIgASiRsDvbVHMSDt16qTbl8BjF4rQ06gRiMOOEZKLEGCEJsN7SiMBEiABEiABEiABEiABEiCBWCQQsOCsXr26ejmxPvLLL7+Mxbml2zF99tlnmngIYcFIREQjARIgARIgARIgARIgARIggVgkELDgxGT69OmjXjaszUQSHFr4CSBR0/Lly3Xt5r333hv+DtkDCZAACZAACZAACZAACZAACQRIICjBWaZMGenWrZt625BVFtkDaeEjgFTDkyZN0g769u3rNVlT+EbBlkmABEiABEiABEiABEiABEjAGYGgBCe6wJYmtWvXluTkZBk1apTuC0kLPQFk2EUyImTTRXIkbB9DIwESIAESIAESIAESIAESIIFYJhC04MT+mIMGDdJtThBWC9F59uzZWJ5z3I0NYnPo0KG6Ryj27hwwYEDczYEDJgESIAESIAESIAES1+de1gAABNJJREFUIAESSDwCQQtOIIPYfOONN3SvSex3+c4778jJkycTj2YYZnzkyBEZPHiwrF27VjljG5ZcuXKFoSc2SQIkQAIkQAIkQAIkQAIkQAKhJRASwYkh1axZU0aOHCl58+aVZcuWqRduw4YNoR1tgrVm5Vi8eHEZO3aslC5dOsEocLokQAIkQAIkQAIkQAIkQALxSiBkghMAqlWrJhMmTJAaNWroms5XX31V3n33Xdm6dWu88on4uJGACd5MeDIRRgsPZ8OGDZVryZIlIz4edkgCJEACJEACJEACJEACJEACgRJICrSip3oQRe+9956MGzdOPvroIw2xxadUqVLqBa1QoYIULFhQcubMKRkyZPDUTMIcR5IlJAJCBtqNGzfqlif79u3T+SNEuWvXrtKxY0fJmDGk7wYShi8nSgIkQAIkQAIkQAIkQAIkED0CIRecmAr25uzZs6e0bdtWxefs2bM14Q0+NN8EihUrpllo27dvL/ny5fNdgSVIgARIgARIgARIgARIgARIIAYJJDndO9NpOescs2bNKr1795bu3bvLkiVLZMWKFbJu3To5ePCgHD16VPfvDJeh7XjwoMJzmSdPHilUqJBUrVpVatWqpdvMGI+mP9z9KevOnXXdiXj+PR5ZeZ4Nz4SCgMnMHY/3RqKNORTXm22QAAmQAAmQAAmkJYCoTbvniiSEbfoyVHRSzq4d1M2fP780b95cP/5YMP3u2rVLSpQo4U93rrLB9Mu6zpGTVWRYOe+FJQMlkJR0IVgkmO9J1nVG39P3RoMGDZw1wFIkQAIkQAIkQAJhIYAlk3bPM1wYGBbcbJQESIAESCASBJo2bRqJbtgHCZAACZAACZCAFwJly5b1uJtGWNZwehkLT5EACYSJAD08YQLLZmOaALJ5OzVP3lEn9YOpm2gRN5yvkzvqQplg7qto1eX15fX1RCBa92Qw/fJ+9nQ10x4PhjM9nGl58ggJxBUBeniie7kQTtukSZPoDoK9kwAJkAAJkAAJkECMEqCHM0YvDIdFAk4J+PLwBPNGKlp14/WNo9NrxnIkQAIkQAIkQAIkkCgE6OFMlCvNeZIACZAACZAACZAACZAACZBAhAlQcEYYOLsjARIgARIgARIgARIgARIggUQhQMGZKFea8yQBEiABEiABEiABEiABEiCBCBOg4IwwcHZHAiRAAiRAAiRAAiRAAiRAAolCgIIzUa4050kCJEACJEACJEACJEACJEACESZAwRlh4OyOBEiABEiABEiABEiABEiABBKFAAVnolxpzpMESIAESIAESIAESIAESIAEIkyAgjPCwNkdCZAACZAACZAACZAACZAACSQKAQrORLnSnCcJkAAJkAAJkAAJkAAJkAAJRJhAhqNHj56PcJ8R6e7YsWOSO3fuiPQVC51wvrFwFcI3Bl7f8LGNhZZ5fWPhKoRvDLy+4WMbCy3z+sbCVQjfGHh9w8c2Flrm9Y3MVUhyIsqCuRis6/xCkhVZeSLAe8MTmbTHySotE09HyMoTmbTHySotE09HyMoTmbTHySotE09HyMoTmbTHySotE09HyMoTmbTHg2HFkNq0PHmEBEiABEiABEiABEiABEiABEggBAQoOEMAkU2QAAmQAAmQAAmQAAmQAAmQAAmkJfB/ve9IfKUjUj4AAAAASUVORK5CYII=" alt="" />
二、Topology实现
1、创建maven工程,配置pom.xml
需要依赖storm-core、kafka_2.10、storm-kafka三个包
<dependencies>
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>0.9.2-incubating</version>
<scope>provided</scope>
</dependency> <dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.1.1</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-kafka</artifactId>
<version>0.9.2-incubating</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2、KafkaSpout
KafkaSpout是Storm中自带的Spout,源码在https://github.com/apache/incubator-storm/tree/master/external
使用KafkaSpout时需要子集实现Scheme接口,它主要负责从消息流中解析出需要的数据
public class MessageScheme implements Scheme { /* (non-Javadoc)
* @see backtype.storm.spout.Scheme#deserialize(byte[])
*/
public List<Object> deserialize(byte[] ser) {
try {
String msg = new String(ser, "UTF-8");
return new Values(msg);
} catch (UnsupportedEncodingException e) { }
return null;
} /* (non-Javadoc)
* @see backtype.storm.spout.Scheme#getOutputFields()
*/
public Fields getOutputFields() {
// TODO Auto-generated method stub
return new Fields("msg");
}
}
3、SenqueceBolt
SenqueceBolt实现很简单,在接收的spout的消息前面加上“I‘m”
public class SenqueceBolt extends BaseBasicBolt{ /* (non-Javadoc)
* @see backtype.storm.topology.IBasicBolt#execute(backtype.storm.tuple.Tuple, backtype.storm.topology.BasicOutputCollector)
*/
public void execute(Tuple input, BasicOutputCollector collector) {
// TODO Auto-generated method stub
String word = (String) input.getValue(0);
String out = "I'm " + word + "!";
System.out.println("out=" + out);
collector.emit(new Values(out));
} /* (non-Javadoc)
* @see backtype.storm.topology.IComponent#declareOutputFields(backtype.storm.topology.OutputFieldsDeclarer)
*/
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("message"));
}
}
4、KafkaBolt
KafkaBolt是Storm中自带的Bolt,负责向Kafka发送主题消息
5、Topology
public class StormKafkaTopo {
public static void main(String[] args) throws Exception {
// 配置Zookeeper地址
BrokerHosts brokerHosts = new ZkHosts("node04:2181,node05:2181,node06:2181");
// 配置Kafka订阅的Topic,以及zookeeper中数据节点目录和名字
SpoutConfig spoutConfig = new SpoutConfig(brokerHosts, "topic1", "/zkkafkaspout" , "kafkaspout");
// 配置KafkaBolt中的kafka.broker.properties
Config conf = new Config();
Map<String, String> map = new HashMap<String, String>();
// 配置Kafka broker地址
map.put("metadata.broker.list", "node04:9092");
// serializer.class为消息的序列化类
map.put("serializer.class", "kafka.serializer.StringEncoder");
conf.put("kafka.broker.properties", map);
// 配置KafkaBolt生成的topic
conf.put("topic", "topic2"); spoutConfig.scheme = new SchemeAsMultiScheme(new MessageScheme());
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", new KafkaSpout(spoutConfig));
builder.setBolt("bolt", new SenqueceBolt()).shuffleGrouping("spout");
builder.setBolt("kafkabolt", new KafkaBolt<String, Integer>()).shuffleGrouping("bolt"); if (args != null && args.length > 0) {
conf.setNumWorkers(3);
StormSubmitter.submitTopology(args[0], conf, builder.createTopology());
} else { LocalCluster cluster = new LocalCluster();
cluster.submitTopology("Topo", conf, builder.createTopology());
Utils.sleep(100000);
cluster.killTopology("Topo");
cluster.shutdown();
}
}
}
三、测试验证
1、使用Kafka client模拟Kafka Producter ,生成topic1主题
bin/kafka-console-producer.sh --broker-list node04:9092 --topic topic1
2、使用Kafka client模拟Kafka Consumer,订阅topic2主题
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic topic2 --from-beginning
3、运行Strom Topology
bin/storm jar storm-kafka-0.0.1-SNAPSHOT-jar-with-dependencies.jar StormKafkaTopo KafkaStorm
4、运行结果
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAn4AAADMCAYAAADtTa43AAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7snQe8FcX1x4cnRlCaBVEs2EIUBLEbsJcQiYrYY4kFS+xii4KJqNglMRrsNWKJigIGUYxd8ldsscRe0VgRBBQVkf2f7zzmMnfv7s7sLa8x5/O57927s9N+U/bsOWfOUZFFq6yySvT888/bl/T3vfbaK7r88ssL18eOHRv98pe/LPyePn16tP/++0e9evWKtt9+++jEE0+Mfv3rXxfSBw4cGA0bNizacccdo9VWWy3ae++9o88//7yQPmPGjGjQoEHR2muvHXHvxRdfXFT+nXfeGW2zzTbRqquuqu+h/Dlz5hS185hjjon+9Kc/FV3jx1dffRX17t07ev3110vSzAVX/7799tvohBNOiLp37x79/Oc/j44++uho9uzZhfJc/Z83b57u04YbbhiB8SabbFLU1p9++ikaPny47tsvfvGL6IwzzojIk0T/+c9/oq5du0affPJJUnLitSuvvDL6zW9+U0ibNWtWtMEGG0QXXXSRvvavf/0r2myzzaKNNtoo2mWXXaK//e1v0XrrrVdSFmXccMMNJderVT5jRN9+/PHHojpuueWW6Fe/+lXUrVu3aOWVV4623HLL6NFHHy1pR7gQEAgIBAQCAgGBgEA2AspONozfa6+9pi+fddZZ+v+NN96o/8cfyPqiB8HMwRw0Ft1///2a0bnrrruimTNnRt9991306aef1qw5d9xxhy77D3/4Q9F/mDvI4FuzBjTTgtMYP9Od999/P7rggguaae9CswMCAYGAQEAgIND4CLRWFglzpDbffHMl0jTVqlUrmMKS/yL1URMmTFCvvPKKEgmfnb3JfhdJo1pxxRWVSC3V2WefrfsnUj513nnnld1mg80//vEPJRJMte2226pHHnmkBK80HM31shvQwjL+9re/VU8//bRabLHFNIZJVFdXp9q2bZuUFK4FBAICAYGAQEAgIOCBQCt4T3PfEkssoX744Qdv5mXjjTdWzz77bIFBTKtv1113VaL6Vb///e/TbmlW10855RQlqltvnFzMHwzo0KFDmxUGobEBgYBAQCAgEBAICDQ/BOpMk/MyfTAzMH3853Pbbbel9l5sApsM0/fNN9/odo4cOVL/P+2007z+i42hvo++VpPpozyY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" alt="" />
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3974417.html
Storm集成Kafka编程模型的更多相关文章
- Storm集成Kafka应用的开发
我们知道storm的作用主要是进行流式计算,对于源源不断的均匀数据流流入处理是非常有效的,而现实生活中大部分场景并不是均匀的数据流,而是时而多时而少的数据流入,这种情况下显然用批量处理是不合适的,如果 ...
- storm集成kafka的应用,从kafka读取,写入kafka
storm集成kafka的应用,从kafka读取,写入kafka by 小闪电 0前言 storm的主要作用是进行流式的实时计算,对于一直产生的数据流处理是非常迅速的,然而大部分数据并不是均匀的数据流 ...
- storm的trident编程模型
storm的基本概念别人总结的, https://blog.csdn.net/pickinfo/article/details/50488226 编程模型最关键最难就是实现局部聚合的业务逻辑聚合类实现 ...
- storm集成kafka
kafkautil: import java.util.Properties; import kafka.javaapi.producer.Producer; import kafka.produce ...
- Storm架构和编程模型总结
1. 编程模型 DataSource:外部数据源 Spout:接受外部数据源的组件,将外部数据源转化成Storm内部的数据,以Tuple为基本的传输单元下发给Bolt Bolt:接受Spout发送的数 ...
- Storm集成Kafka的Trident实现
原本打算将storm直接与flume直连,发现相应组件支持比较弱,topology任务对应的supervisor也不一定在哪个节点上,只能采用统一的分布式消息服务Kafka. 原本打算将结构设 ...
- Storm 学习之路(九)—— Storm集成Kafka
一.整合说明 Storm官方对Kafka的整合分为两个版本,官方说明文档分别如下: Storm Kafka Integration : 主要是针对0.8.x版本的Kafka提供整合支持: Storm ...
- Storm 系列(九)—— Storm 集成 Kafka
一.整合说明 Storm 官方对 Kafka 的整合分为两个版本,官方说明文档分别如下: Storm Kafka Integration : 主要是针对 0.8.x 版本的 Kafka 提供整合支持: ...
- 5、Storm集成Kafka
1.pom文件依赖 <!--storm相关jar --> <dependency> <groupId>org.apache.storm</groupId> ...
随机推荐
- JAVA 画图机制
java学习脚印:深入java绘图机制 写在前面 封装性越好的类在使用时,只要清楚接口即可,而不应该让程序员了解其内部结构; 对于平常的绘图来讲,java绘图机制无需了解太多,但是朦胧容易产生错误,绘 ...
- IO/序列化/JSON
一.读写文件 1.open:打开文件 open(path, mode, encoding='xxx', errors='ignore') mode取值:rU 或 Ua 以读方式打开, 同时提供通用换行 ...
- 用filter:grayscale将图片过滤成灰色
设置成百分之百直接过滤成灰色: img{filter:gray; filter:grayscale(100%); -0-filter:grayscale(100%); -moz-filter:gray ...
- VUE购物车示例
代码下载地址:https://github.com/MengFangui/VueShoppingCart 1.index.html <!DOCTYPE html> <html lan ...
- C/C++中float和double的存储结构(转)
在C/C++中float是32位的,double是64位的,两者在内存中的存储方式和能够表示的精度均不同,目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算. ...
- Hadoop系统通信协议介绍(转)
转载自 ---- http://weilaiyxj.iteye.com/blog/913166 本文约定: DN: DataNode TT: TaskTracker NN: NameNode SNN: ...
- Spring技术内幕:Spring AOP的实现原理(三)
生成SingleTon代理对象在getSingleTonInstance方法中完毕,这种方法时ProxyFactoryBean生成AopProxy对象的入口.代理对象会封装对target目标对象的调用 ...
- C#面试题汇总2
http://www.cnblogs.com/wangjisi/archive/2010/06/14/1758347.html 用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及 ...
- unity, change shader for me and all my children
public void changeShaderForMeAndAllMyChildren(){ Transform[] childrenTransformList = GetComponentsIn ...
- self.navigationItem.titleView 不居中显示的问题
自定义一个AUIView, AUIView * v=[AUIView new]; self.navigationItem.titleView = v; 在AUIView类内重写 setFrame - ...