{"id":34873,"date":"2024-08-14T15:22:01","date_gmt":"2024-08-14T08:22:01","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/14\/install-and-configure-apache-kafka-on-ubuntu\/"},"modified":"2024-08-14T15:22:01","modified_gmt":"2024-08-14T08:22:01","slug":"install-and-configure-apache-kafka-on-ubuntu","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/14\/install-and-configure-apache-kafka-on-ubuntu\/","title":{"rendered":"C\u00e0i \u0111\u1eb7t v\u00e0 c\u1ea5u h\u00ecnh Apache Kafka tr\u00ean Ubuntu"},"content":{"rendered":"<p><a href=\"https:\/\/kafka.apache.org\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Apache Kafka<\/em><\/a>&nbsp;, th\u01b0\u1eddng \u0111\u01b0\u1ee3c g\u1ecdi \u0111\u01a1n gi\u1ea3n l\u00e0 Kafka, l\u00e0 m\u1ed9t n\u1ec1n t\u1ea3ng m\u00e3 ngu\u1ed3n m\u1edf ph\u1ed5 bi\u1ebfn \u0111\u1ec3 qu\u1ea3n l\u00fd v\u00e0 x\u1eed l\u00fd lu\u1ed3ng. Kafka \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng xung quanh kh\u00e1i ni\u1ec7m v\u1ec1 m\u1ed9t s\u1ef1 ki\u1ec7n. C\u00e1c t\u00e1c nh\u00e2n b\u00ean ngo\u00e0i, \u0111\u1ed9c l\u1eadp v\u00e0 kh\u00f4ng \u0111\u1ed3ng b\u1ed9, g\u1eedi v\u00e0 nh\u1eadn th\u00f4ng b\u00e1o s\u1ef1 ki\u1ec7n \u0111\u1ebfn v\u00e0 \u0111i t\u1eeb Kafka. Kafka ch\u1ea5p nh\u1eadn m\u1ed9t lu\u1ed3ng s\u1ef1 ki\u1ec7n li\u00ean t\u1ee5c t\u1eeb nhi\u1ec1u m\u00e1y kh\u00e1ch, l\u01b0u tr\u1eef ch\u00fang v\u00e0 c\u00f3 kh\u1ea3 n\u0103ng chuy\u1ec3n ti\u1ebfp ch\u00fang \u0111\u1ebfn m\u1ed9t nh\u00f3m m\u00e1y kh\u00e1ch th\u1ee9 hai \u0111\u1ec3 x\u1eed l\u00fd th\u00eam. N\u00f3 linh ho\u1ea1t, m\u1ea1nh m\u1ebd, \u0111\u00e1ng tin c\u1eady, \u0111\u1ed9c l\u1eadp v\u00e0 cung c\u1ea5p \u0111\u1ed9 tr\u1ec5 th\u1ea5p c\u00f9ng v\u1edbi th\u00f4ng l\u01b0\u1ee3ng cao. LinkedIn ban \u0111\u1ea7u \u0111\u00e3 ph\u00e1t tri\u1ec3n Kafka, nh\u01b0ng Apache Software Foundation cung c\u1ea5p phi\u00ean b\u1ea3n m\u00e3 ngu\u1ed3n m\u1edf hi\u1ec7n t\u1ea1i.<\/p>\n<h2 id=\"before-you-begin\">Tr\u01b0\u1edbc khi b\u1ea1n b\u1eaft \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-kafka-on-ubuntu\/#before-you-begin\"><\/a><\/h2>\n<ol>\n<li>N\u1ebfu b\u1ea1n ch\u01b0a th\u1ef1c hi\u1ec7n, h\u00e3y t\u1ea1o m\u1ed9t t\u00e0i kho\u1ea3n Linode v\u00e0 Compute Instance. Xem h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/platform\/get-started\/\">B\u1eaft \u0111\u1ea7u v\u1edbi Linode<\/a>&nbsp;v\u00e0&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/create\/\">T\u1ea1o Compute Instance<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i .<\/li>\n<li>L\u00e0m theo h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/set-up-and-secure\/\">Thi\u1ebft l\u1eadp v\u00e0 B\u1ea3o m\u1eadt Phi\u00ean b\u1ea3n Compute<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i \u0111\u1ec3 c\u1eadp nh\u1eadt h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 mu\u1ed1n \u0111\u1eb7t m\u00fai gi\u1edd, c\u1ea5u h\u00ecnh t\u00ean m\u00e1y ch\u1ee7, t\u1ea1o t\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng gi\u1edbi h\u1ea1n v\u00e0 t\u0103ng c\u01b0\u1eddng quy\u1ec1n truy c\u1eadp SSH.<\/li>\n<\/ol>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: H\u01b0\u1edbng d\u1eabn n\u00e0y \u0111\u01b0\u1ee3c vi\u1ebft cho ng\u01b0\u1eddi d\u00f9ng kh\u00f4ng ph\u1ea3i root. C\u00e1c l\u1ec7nh y\u00eau c\u1ea7u quy\u1ec1n n\u00e2ng cao \u0111\u01b0\u1ee3c th\u00eam ti\u1ec1n t\u1ed1&nbsp;<code>sudo<\/code>. N\u1ebfu b\u1ea1n kh\u00f4ng quen v\u1edbi <code>sudo<\/code> l\u1ec7nh n\u00e0y, h\u00e3y xem h\u01b0\u1edbng d\u1eabn <a href=\"https:\/\/www.linode.com\/docs\/guides\/linux-users-and-groups\/\">Ng\u01b0\u1eddi d\u00f9ng v\u00e0 Nh\u00f3m Linux<\/a>&nbsp;.<\/p>\n<h2 id=\"a-summary-of-the-apache-kafka-installation-process\">T\u00f3m t\u1eaft v\u1ec1 quy tr\u00ecnh c\u00e0i \u0111\u1eb7t Apache Kafka<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-kafka-on-ubuntu\/#a-summary-of-the-apache-kafka-installation-process\"><\/a><\/h2>\n<p>C\u00e0i \u0111\u1eb7t Kafka ho\u00e0n ch\u1ec9nh bao g\u1ed3m c\u00e1c b\u01b0\u1edbc c\u1ea5p cao \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea b\u00ean d\u01b0\u1edbi. M\u1ed7i b\u01b0\u1edbc \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 trong m\u1ed9t ph\u1ea7n ri\u00eang. C\u00e1c h\u01b0\u1edbng d\u1eabn n\u00e0y \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf cho Ubuntu 24.04 nh\u01b0ng nh\u00ecn chung c\u00f3 gi\u00e1 tr\u1ecb \u0111\u1ed1i v\u1edbi b\u1ea5t k\u1ef3 b\u1ea3n ph\u00e2n ph\u1ed1i Linux n\u00e0o d\u1ef1a tr\u00ean Debian.<\/p>\n<ol>\n<li>C\u00e0i \u0111\u1eb7t Java<\/li>\n<li>T\u1ea3i xu\u1ed1ng v\u00e0 c\u00e0i \u0111\u1eb7t Apache Kafka<\/li>\n<li>Ch\u1ea1y Kafka<\/li>\n<li>T\u1ea1o ch\u1ee7 \u0111\u1ec1 Kafka<\/li>\n<li>Vi\u1ebft v\u00e0 \u0111\u1ecdc s\u1ef1 ki\u1ec7n Kafka<\/li>\n<li>X\u1eed l\u00fd d\u1eef li\u1ec7u v\u1edbi Kafka Streams<\/li>\n<li>T\u1ea1o t\u1eadp tin h\u1ec7 th\u1ed1ng cho Zookeeper v\u00e0 Kafka<\/li>\n<\/ol>\n<h2 id=\"install-java\">C\u00e0i \u0111\u1eb7t Java<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-kafka-on-ubuntu\/#install-java\"><\/a><\/h2>\n<p>B\u1ea1n ph\u1ea3i c\u00e0i \u0111\u1eb7t Java tr\u01b0\u1edbc khi c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng Apache Kafka. H\u01b0\u1edbng d\u1eabn n\u00e0y gi\u1ea3i th\u00edch c\u00e1ch c\u00e0i \u0111\u1eb7t OpenJDK, phi\u00ean b\u1ea3n m\u00e3 ngu\u1ed3n m\u1edf c\u1ee7a Java.<\/p>\n<p>1.C\u1eadp nh\u1eadt c\u00e1c g\u00f3i Ubuntu c\u1ee7a b\u1ea1n.<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt update\n<\/code><\/pre>\n<p>2.C\u00e0i \u0111\u1eb7t OpenJDK b\u1eb1ng&nbsp;<code>apt<\/code>.<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt install openjdk-21-jdk<\/code><\/pre>\n<p>3.X\u00e1c nh\u1eadn b\u1ea1n \u0111\u00e3 c\u00e0i \u0111\u1eb7t phi\u00ean b\u1ea3n Java mong mu\u1ed1n.<\/p>\n<pre class=\"wp-block-code\"><code>java -version<\/code><\/pre>\n<p>Java tr\u1ea3 v\u1ec1 m\u1ed9t s\u1ed1 th\u00f4ng tin c\u01a1 b\u1ea3n v\u1ec1 c\u00e0i \u0111\u1eb7t. Th\u00f4ng tin c\u00f3 th\u1ec3 thay \u0111\u1ed5i t\u00f9y theo phi\u00ean b\u1ea3n b\u1ea1n \u0111\u00e3 c\u00e0i \u0111\u1eb7t.<\/p>\n<pre class=\"wp-block-code\"><code>openjdk 21.0.3 2024-04-16\nOpenJDK Runtime Environment (build 21.0.3+9-Ubuntu-1ubuntu1)\nOpenJDK 64-Bit Server VM (build 21.0.3+9-Ubuntu-1ubuntu1, mixed mode, sharing)<\/code><\/pre>\n<h2 id=\"download-and-install-apache-kafka\">T\u1ea3i xu\u1ed1ng v\u00e0 c\u00e0i \u0111\u1eb7t Apache Kafka<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-kafka-on-ubuntu\/#download-and-install-apache-kafka\"><\/a><\/h2>\n<p>C\u00f3 th\u1ec3 t\u1ea3i xu\u1ed1ng kho l\u01b0u tr\u1eef Tar cho Apache Kafka tr\u1ef1c ti\u1ebfp t\u1eeb Trang web Apache v\u00e0 c\u00e0i \u0111\u1eb7t theo quy tr\u00ecnh \u0111\u01b0\u1ee3c n\u00eau trong ph\u1ea7n n\u00e0y. T\u00ean t\u1ea3i xu\u1ed1ng Kafka thay \u0111\u1ed5i t\u00f9y theo phi\u00ean b\u1ea3n ph\u00e1t h\u00e0nh. Thay th\u1ebf t\u00ean t\u1ec7p c\u1ee7a ri\u00eang b\u1ea1n b\u1ea5t c\u1ee9 n\u01a1i n\u00e0o b\u1ea1n th\u1ea5y&nbsp;<code>kafka_2.13-3.7.0.tgz<\/code>.<\/p>\n<p>1.\u0110i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<a href=\"https:\/\/kafka.apache.org\/downloads\" target=\"_blank\" rel=\"noreferrer noopener\">trang T\u1ea3i xu\u1ed1ng Apache Kafka<\/a>&nbsp;v\u00e0 ch\u1ecdn b\u1ea3n ph\u00e1t h\u00e0nh Kafka b\u1ea1n mu\u1ed1n. Ch\u00fang t\u00f4i khuy\u00ean b\u1ea1n n\u00ean ch\u1ecdn phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t, hi\u1ec7n t\u1ea1i l\u00e0 Apache Kafka 2.7. Li\u00ean k\u1ebft n\u00e0y s\u1ebd \u0111\u01b0a b\u1ea1n \u0111\u1ebfn trang \u0111\u00edch n\u01a1i b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng HTTP ho\u1eb7c FTP \u0111\u1ec3 t\u1ea3i xu\u1ed1ng t\u1ec7p tar.<\/p>\n<p>2.N\u1ebfu b\u1ea1n \u0111\u00e3 t\u1ea3i ph\u1ea7n m\u1ec1m xu\u1ed1ng m\u1ed9t m\u00e1y t\u00ednh kh\u00e1c v\u1edbi m\u00e1y ch\u1ee7, h\u00e3y chuy\u1ec3n c\u00e1c t\u1ec7p Apache Kafka sang m\u00e1y ch\u1ee7 th\u00f4ng qua&nbsp;<code>scp<\/code>,&nbsp;<code>ftp<\/code>, ho\u1eb7c m\u1ed9t ph\u01b0\u01a1ng ph\u00e1p chuy\u1ec3n t\u1ec7p kh\u00e1c. Thay th\u1ebf c\u00e1c gi\u00e1 tr\u1ecb&nbsp;<code>user<\/code>v\u00e0&nbsp;<code>yourhost<\/code>b\u1eb1ng t\u00ean ng\u01b0\u1eddi d\u00f9ng v\u00e0 \u0111\u1ecba ch\u1ec9 IP m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>scp \/localpath\/kafka_2.13-3.7.0.tgz user@192.0.2.0:~\/<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: N\u1ebfu vi\u1ec7c truy\u1ec1n d\u1eef li\u1ec7u b\u1ecb ch\u1eb7n, h\u00e3y x\u00e1c minh t\u01b0\u1eddng l\u1eeda c\u1ee7a b\u1ea1n kh\u00f4ng ch\u1eb7n k\u1ebft n\u1ed1i. Th\u1ef1c hi\u1ec7n l\u1ec7nh&nbsp;<code>sudo ufw allow 22\/tcp<\/code>allow <code>ufw<\/code> \u0111\u1ec3 cho ph\u00e9p&nbsp;<code>scp<\/code> truy\u1ec1n d\u1eef li\u1ec7u.<\/p>\n<p>3.<strong>T\u00f9y ch\u1ecdn<\/strong>&nbsp;: B\u1ea1n c\u00f3 th\u1ec3 x\u00e1c nh\u1eadn b\u1ea1n \u0111\u00e3 t\u1ea3i xu\u1ed1ng t\u1ec7p \u0111\u00fang c\u00e1ch b\u1eb1ng t\u1ed5ng ki\u1ec3m tra SHA512. B\u1ea1n c\u00f3 th\u1ec3 t\u00ecm t\u1ec7p t\u1ed5ng ki\u1ec3m tra tr\u00ean&nbsp;<a href=\"https:\/\/kafka.apache.org\/downloads\" target=\"_blank\" rel=\"noreferrer noopener\">trang T\u1ea3i xu\u1ed1ng Apache Kafka<\/a>&nbsp;. M\u1ed7i b\u1ea3n ph\u00e1t h\u00e0nh \u0111\u1ec1u c\u00f3 li\u00ean k\u1ebft \u0111\u1ebfn&nbsp;<code>sha512<\/code>t\u1ec7p t\u01b0\u01a1ng \u1ee9ng. T\u1ea3i xu\u1ed1ng t\u1ec7p n\u00e0y v\u00e0 chuy\u1ec3n t\u1ec7p n\u00e0y \u0111\u1ebfn m\u00e1y ch\u1ee7 Kafka c\u1ee7a b\u1ea1n b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>scp<\/code>. \u0110\u1eb7t t\u1ec7p t\u1ed5ng ki\u1ec3m tra v\u00e0o c\u00f9ng th\u01b0 m\u1ee5c v\u1edbi t\u1ec7p tar c\u1ee7a b\u1ea1n. Th\u1ef1c hi\u1ec7n l\u1ec7nh sau \u0111\u1ec3 t\u1ea1o t\u1ed5ng ki\u1ec3m tra cho t\u1ec7p tar:<\/p>\n<pre class=\"wp-block-code\"><code>gpg --print-md SHA512 kafka_2.13-3.7.0.tgz\n<\/code><\/pre>\n<p>So s\u00e1nh \u0111\u1ea7u ra t\u1eeb l\u1ec7nh n\u00e0y v\u1edbi n\u1ed9i dung c\u1ee7a t\u1ec7p&nbsp;<code>SHA512<\/code>. Hai t\u1ed5ng ki\u1ec3m tra ph\u1ea3i kh\u1edbp nhau. B\u01b0\u1edbc n\u00e0y kh\u00f4ng x\u00e1c nh\u1eadn t\u00ednh x\u00e1c th\u1ef1c c\u1ee7a t\u1ec7p, ch\u1ec9 x\u00e1c nh\u1eadn t\u00ednh h\u1ee3p l\u1ec7 c\u1ee7a t\u1ec7p. \u0110\u1ea7u ra t\u1ed5ng ki\u1ec3m tra c\u00f3 \u0111\u1ecbnh d\u1ea1ng sau:<\/p>\n<pre class=\"wp-block-code\"><code>kafka_2.13-3.7.0.tgz: F3DD1FD8 8766D915 0D3D395B 285BFA75 F5B89A83 58223814\n                      90C8428E 6E568889 054DDB5F ADA1EB63 613A6441 989151BC\n                      7C7D6CDE 16A871C6 674B909C 4EDD4E28<\/code><\/pre>\n<p>4.\u0110\u1ec3 b\u1ea3o m\u1eadt h\u01a1n, h\u00e3y x\u00e1c nh\u1eadn t\u1ec7p \u0111\u00e3 \u0111\u01b0\u1ee3c k\u00fd. T\u1ea3i xu\u1ed1ng t\u1ec7p&nbsp;<code>.asc<\/code>v\u00e0 kh\u00f3a k\u00fd li\u00ean quan \u0111\u1ebfn b\u1ea3n ph\u00e1t h\u00e0nh. B\u1ea1n c\u00f3 th\u1ec3 t\u00ecm th\u1ea5y c\u00e1c t\u1ec7p n\u00e0y tr\u00ean&nbsp;<a href=\"https:\/\/kafka.apache.org\/downloads\" target=\"_blank\" rel=\"noreferrer noopener\">trang T\u1ea3i xu\u1ed1ng Apache Kafka<\/a>&nbsp;. Li\u00ean k\u1ebft \u0111\u1ebfn&nbsp;<code>KEYS<\/code>t\u1ec7p n\u1eb1m \u1edf \u0111\u1ea7u trang. M\u1ed7i b\u1ea3n ph\u00e1t h\u00e0nh bao g\u1ed3m m\u1ed9t li\u00ean k\u1ebft \u0111\u1ebfn&nbsp;<code>asc<\/code>t\u1ec7p c\u1ee7a n\u00f3. T\u1ea3i xu\u1ed1ng c\u00e1c t\u1ec7p n\u00e0y v\u00e0 chuy\u1ec3n ch\u00fang \u0111\u1ebfn m\u00e1y ch\u1ee7 Kafka c\u1ee7a b\u1ea1n b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>scp<\/code>. \u0110\u1eb7t c\u00e1c t\u1ec7p n\u00e0y v\u00e0o c\u00f9ng th\u01b0 m\u1ee5c v\u1edbi t\u1ec7p tar c\u1ee7a b\u1ea1n.<\/p>\n<p>Nh\u1eadp kh\u00f3a t\u1eeb&nbsp;<code>KEYS<\/code>t\u1ec7p. Thao t\u00e1c n\u00e0y s\u1ebd c\u00e0i \u0111\u1eb7t to\u00e0n b\u1ed9 b\u1ed9 kh\u00f3a.<\/p>\n<pre class=\"wp-block-code\"><code>gpg --import KEYS<\/code><\/pre>\n<p>S\u1eed d\u1ee5ng&nbsp;<code>gpg<\/code> \u0111\u1ec3 x\u00e1c minh ch\u1eef k\u00fd.<\/p>\n<pre class=\"wp-block-code\"><code>gpg --verify kafka_2.13-3.7.0.tgz.asc  kafka_2.13-3.7.0.tgz\n<\/code><\/pre>\n<p>\u0110\u1ea7u ra s\u1ebd li\u1ec7t k\u00ea kh\u00f3a RSA th\u1ef1c t\u1ebf v\u00e0 ng\u01b0\u1eddi \u0111\u00e3 k\u00fd kh\u00f3a \u0111\u00f3.<\/p>\n<pre class=\"wp-block-code\"><code>gpg: Signature made Wed Dec 16 14:03:36 2020 UTC\ngpg:                using RSA key DFB5ABA9CD50A02B5C2A511662A9813636302260\ngpg:                issuer \"bbejeck@apache.org\"\ngpg: Good signature from \"Bill Bejeck (CODE SIGNING KEY) &lt;bbejeck@apache.org&gt;\" &#91;unknown]<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: <code>Gpg<\/code>c\u00f3 th\u1ec3 c\u1ea3nh b\u00e1o b\u1ea1n r\u1eb1ng &#8220;kh\u00f3a kh\u00f4ng \u0111\u01b0\u1ee3c ch\u1ee9ng nh\u1eadn b\u1eb1ng ch\u1eef k\u00fd \u0111\u00e1ng tin c\u1eady&#8221;. Th\u1eadt kh\u00f4ng may, kh\u00f4ng c\u00f3 c\u00e1ch d\u1ec5 d\u00e0ng n\u00e0o \u0111\u1ec3 x\u00e1c nh\u1eadn t\u00ednh x\u00e1c th\u1ef1c c\u1ee7a ng\u01b0\u1eddi k\u00fd v\u00e0 \u0111\u1ed1i v\u1edbi h\u1ea7u h\u1ebft c\u00e1c l\u1ea7n tri\u1ec3n khai, \u0111i\u1ec1u n\u00e0y l\u00e0 kh\u00f4ng c\u1ea7n thi\u1ebft. \u0110\u1ed1i v\u1edbi x\u00e1c th\u1ef1c kh\u00f4ng \u0111\u1ee7 \u0111i\u1ec1u ki\u1ec7n cho c\u00e1c l\u1ea7n tri\u1ec3n khai b\u1ea3o m\u1eadt cao, h\u00e3y l\u00e0m theo c\u00e1c b\u01b0\u1edbc \u0111\u1ec3&nbsp;<em>X\u00e1c th\u1ef1c t\u00ednh x\u00e1c th\u1ef1c c\u1ee7a Kh\u00f3a<\/em>&nbsp;tr\u00ean&nbsp;<a href=\"https:\/\/www.apache.org\/info\/verification.html\" target=\"_blank\" rel=\"noreferrer noopener\">trang X\u00e1c th\u1ef1c Apache Kafka<\/a>&nbsp;.<\/p>\n<p>5.Gi\u1ea3i n\u00e9n c\u00e1c t\u1eadp tin b\u1eb1ng&nbsp;<code>tar<\/code>ti\u1ec7n \u00edch. Sau khi qu\u00e1 tr\u00ecnh gi\u1ea3i n\u00e9n ho\u00e0n t\u1ea5t, h\u00e3y x\u00f3a t\u1ec7p l\u01b0u tr\u1eef ho\u1eb7c l\u01b0u tr\u1eef \u1edf n\u01a1i an to\u00e0n kh\u00e1c tr\u00ean h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n.<\/p>\n<pre class=\"wp-block-code\"><code>tar -zxvf kafka_2.13-3.7.0.tgz<\/code><\/pre>\n<p>6.<strong>T\u00f9y ch\u1ecdn<\/strong>&nbsp;: T\u1ea1o m\u1ed9t th\u01b0 m\u1ee5c t\u1eadp trung m\u1edbi cho Kafka v\u00e0 di chuy\u1ec3n c\u00e1c t\u1ec7p \u0111\u00e3 gi\u1ea3i n\u00e9n v\u00e0o th\u01b0 m\u1ee5c g\u1ed1c Kafka m\u1edbi n\u00e0y.<\/p>\n<pre class=\"wp-block-code\"><code>sudo mkdir \/home\/kafka\nsudo mv kafka_2.13-3.7.0 \/home\/kafka<\/code><\/pre>\n<h2 id=\"run-kafka\">Run Kafka<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-kafka-on-ubuntu\/#run-kafka\"><\/a><\/h2>\n<p>Kafka c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c kh\u1edfi ch\u1ea1y tr\u1ef1c ti\u1ebfp t\u1eeb d\u00f2ng l\u1ec7nh. B\u1ea1n ph\u1ea3i kh\u1edfi ch\u1ea1y m\u00f4-\u0111un Zookeeper tr\u01b0\u1edbc khi ch\u1ea1y Kafka.<\/p>\n<p>1.Xem l\u1ea1i c\u00e1c thi\u1ebft l\u1eadp c\u00f3 trong&nbsp;<code>kafka_2.13-3.7.0\/config\/server.properties<\/code>t\u1ec7p trong th\u01b0 m\u1ee5c Kafka c\u1ee7a b\u1ea1n. Hi\u1ec7n t\u1ea1i, c\u00e1c thi\u1ebft l\u1eadp m\u1eb7c \u0111\u1ecbnh l\u00e0 t\u1ed1t. Nh\u01b0ng ch\u00fang t\u00f4i khuy\u00ean b\u1ea1n n\u00ean \u0111\u1eb7t&nbsp;<code>delete.topic.enable<\/code>thu\u1ed9c t\u00ednh&nbsp;<code>true<\/code>\u1edf cu\u1ed1i t\u1ec7p. \u0110i\u1ec1u n\u00e0y cho ph\u00e9p b\u1ea1n x\u00f3a b\u1ea5t k\u1ef3 ch\u1ee7 \u0111\u1ec1 n\u00e0o b\u1ea1n c\u00f3 th\u1ec3 t\u1ea1o trong qu\u00e1 tr\u00ecnh th\u1eed nghi\u1ec7m.<\/p>\n<pre class=\"wp-block-code\"><code>delete.topic.enable = true\n<\/code><\/pre>\n<p>2.Chuy\u1ec3n \u0111\u1ebfn th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a Kafka v\u00e0 kh\u1edfi \u0111\u1ed9ng Zookeeper.<\/p>\n<pre class=\"wp-block-code\"><code>cd \/home\/kafka\/kafka_2.13-3.7.0\/\nbin\/zookeeper-server-start.sh config\/zookeeper.properties<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Gi\u1eef nguy\u00ean m\u1ecdi c\u00e0i \u0111\u1eb7t \u1edf&nbsp;<code>Zookeeper.properties<\/code>ch\u1ebf \u0111\u1ed9 m\u1eb7c \u0111\u1ecbnh cho h\u1ea7u h\u1ebft c\u00e1c l\u1ea7n tri\u1ec3n khai.<\/p>\n<p>3.M\u1edf phi\u00ean \u0111i\u1ec1u khi\u1ec3n m\u1edbi v\u00e0 kh\u1edfi ch\u1ea1y Kafka.<\/p>\n<pre class=\"wp-block-code\"><code>cd \/home\/kafka\/kafka_2.13-3.7.0\/\nbin\/kafka-server-start.sh config\/server.properties<\/code><\/pre>\n<h2 id=\"create-a-kafka-topic\">T\u1ea1o ch\u1ee7 \u0111\u1ec1 Kafka<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-kafka-on-ubuntu\/#create-a-kafka-topic\"><\/a><\/h2>\n<p>Tr\u01b0\u1edbc khi b\u1ea1n c\u00f3 th\u1ec3 g\u1eedi b\u1ea5t k\u1ef3 s\u1ef1 ki\u1ec7n n\u00e0o \u0111\u1ebfn Kafka, b\u1ea1n ph\u1ea3i t\u1ea1o m\u1ed9t ch\u1ee7 \u0111\u1ec1 \u0111\u1ec3 ch\u1ee9a c\u00e1c s\u1ef1 ki\u1ec7n. B\u1ea1n c\u00f3 th\u1ec3 t\u00ecm th\u1ea5y l\u1eddi gi\u1ea3i th\u00edch v\u1ec1 c\u00e1c ch\u1ee7 \u0111\u1ec1 trong&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/what-is-apache-kafka\">Gi\u1edbi thi\u1ec7u v\u1ec1 Kafka c\u1ee7a Linode<\/a>&nbsp;.<\/p>\n<p>1.M\u1edf m\u1ed9t phi\u00ean \u0111i\u1ec1u khi\u1ec3n m\u1edbi.<\/p>\n<p>2.Thay \u0111\u1ed5i th\u01b0 m\u1ee5c th\u00e0nh th\u01b0 m\u1ee5c Kafka c\u1ee7a b\u1ea1n v\u00e0 t\u1ea1o m\u1ed9t ch\u1ee7 \u0111\u1ec1 m\u1edbi c\u00f3 t\u00ean&nbsp;<code>test-events<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>cd \/home\/kafka\/kafka_2.13-3.7.0\/\nbin\/kafka-topics.sh --create --topic test-events --bootstrap-server localhost:9092<\/code><\/pre>\n<p>Kafka x\u00e1c nh\u1eadn ch\u1ee7 \u0111\u1ec1 \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o:<\/p>\n<pre class=\"wp-block-code\"><code>Created topic test-events.\n<\/code><\/pre>\n<p>3.T\u1ea1o danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c ch\u1ee7 \u0111\u1ec1 trong c\u1ee5m v\u1edbi t\u00f9y&nbsp;<code>--list<\/code>ch\u1ecdn:<\/p>\n<pre class=\"wp-block-code\"><code>bin\/kafka-topics.sh --list --bootstrap-server localhost:9092<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd th\u1ea5y \u0111\u01b0\u1ee3c&nbsp;<code>test-events<\/code>li\u1ec7t k\u00ea trong k\u1ebft qu\u1ea3 \u0111\u1ea7u ra:<\/p>\n<pre class=\"wp-block-code\"><code>test-events\n<\/code><\/pre>\n<p>4.S\u1eed d\u1ee5ng&nbsp;<code>describe<\/code>c\u1edd \u0111\u1ec3 hi\u1ec3n th\u1ecb t\u1ea5t c\u1ea3 th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 m\u1edbi:<\/p>\n<pre class=\"wp-block-code\"><code>bin\/kafka-topics.sh --describe --topic test-events --bootstrap-server localhost:9092<\/code><\/pre>\n<p>Kafka tr\u1ea3 v\u1ec1 b\u1ea3n t\u00f3m t\u1eaft v\u1ec1 ch\u1ee7 \u0111\u1ec1, bao g\u1ed3m s\u1ed1 l\u01b0\u1ee3ng ph\u00e2n v\u00f9ng v\u00e0 h\u1ec7 s\u1ed1 sao ch\u00e9p:<\/p>\n<pre class=\"wp-block-code\"><code>Topic: test-events  TopicId: URC3EPiqTUW2fBkJuW5AYQ PartitionCount: 1   ReplicationFactor: 1    Configs:\n    Topic: test-events  Partition: 0    Leader: 0   Replicas: 0 Isr: 0<\/code><\/pre>\n<h2 id=\"writing-and-reading-kafka-events\">Vi\u1ebft v\u00e0 \u0111\u1ecdc s\u1ef1 ki\u1ec7n Kafka<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-kafka-on-ubuntu\/#writing-and-reading-kafka-events\"><\/a><\/h2>\n<p>Giao di\u1ec7n d\u00f2ng l\u1ec7nh c\u1ee7a Kafka cho ph\u00e9p b\u1ea1n nhanh ch\u00f3ng ki\u1ec3m tra ch\u1ee7 \u0111\u1ec1 m\u1edbi. S\u1eed d\u1ee5ng API \u0111\u1ec3 t\u1ea1o Producer v\u00e0 vi\u1ebft m\u1ed9t s\u1ed1 s\u1ef1 ki\u1ec7n v\u00e0o ch\u1ee7 \u0111\u1ec1. Sau \u0111\u00f3, t\u1ea1o consumer v\u00e0 \u0111\u1ecdc c\u00e1c s\u1ef1 ki\u1ec7n b\u1ea1n \u0111\u00e3 vi\u1ebft.<\/p>\n<p>1.M\u1edf phi\u00ean \u0111i\u1ec1u khi\u1ec3n m\u1edbi cho nh\u00e0 s\u1ea3n xu\u1ea5t v\u00e0 thay \u0111\u1ed5i th\u01b0 m\u1ee5c th\u00e0nh th\u01b0 m\u1ee5c g\u1ed1c Kafka.<\/p>\n<pre class=\"wp-block-code\"><code>cd \/home\/kafka\/kafka_2.13-3.7.0\/\n<\/code><\/pre>\n<p>2.C\u1ea5u h\u00ecnh m\u1ed9t nh\u00e0 s\u1ea3n xu\u1ea5t v\u00e0 ch\u1ec9 \u0111\u1ecbnh ch\u1ee7 \u0111\u1ec1 cho c\u00e1c s\u1ef1 ki\u1ec7n c\u1ee7a n\u00f3. B\u1ea1n ch\u01b0a t\u1ea1o b\u1ea5t k\u1ef3 s\u1ef1 ki\u1ec7n n\u00e0o, ch\u1ec9 c\u00f3 m\u1ed9t m\u00e1y kh\u00e1ch c\u00f3 kh\u1ea3 n\u0103ng g\u1eedi s\u1ef1 ki\u1ec7n. Kafka tr\u1ea3 v\u1ec1 l\u1eddi nh\u1eafc&nbsp;<code>&gt;<\/code>cho bi\u1ebft nh\u00e0 s\u1ea3n xu\u1ea5t \u0111\u00e3 s\u1eb5n s\u00e0ng.<\/p>\n<pre class=\"wp-block-code\"><code>bin\/kafka-console-producer.sh --topic test-events --bootstrap-server localhost:9092\n<\/code><\/pre>\n<p>3.G\u1eedi m\u1ed9t v\u00e0i c\u1eb7p kh\u00f3a-gi\u00e1 tr\u1ecb \u0111\u1ebfn Kafka. T\u00e1ch c\u00e1c kh\u00f3a v\u00e0 gi\u00e1 tr\u1ecb b\u1eb1ng d\u1ea5u&nbsp;<code>:<\/code>. B\u1ea1n c\u00f3 th\u1ec3 ch\u1ecdn vi\u1ebft tin nh\u1eafn b\u1eb1ng c\u00e1c kh\u00f3a kh\u00e1c nhau ho\u1eb7c b\u1eb1ng c\u00f9ng m\u1ed9t kh\u00f3a. N\u1ebfu b\u1ea1n kh\u00f4ng ch\u1ec9 \u0111\u1ecbnh kh\u00f3a v\u00e0 ch\u1ec9 \u0111\u1ecbnh gi\u00e1 tr\u1ecb, s\u1ef1 ki\u1ec7n s\u1ebd \u0111\u01b0\u1ee3c g\u00e1n kh\u00f3a NULL.<\/p>\n<pre class=\"wp-block-code\"><code>key1: This is event 1\nkey2: This is event 2\nkey1: This is event 3<\/code><\/pre>\n<p>4.M\u1edf phi\u00ean \u0111i\u1ec1u khi\u1ec3n m\u1edbi \u0111\u1ec3 ch\u1ea1y tr\u00ecnh ti\u00eau d\u00f9ng v\u00e0 thay \u0111\u1ed5i th\u01b0 m\u1ee5c th\u00e0nh th\u01b0 m\u1ee5c g\u1ed1c Kafka.<\/p>\n<pre class=\"wp-block-code\"><code>cd \/home\/kafka\/kafka_2.13-3.7.0\/<\/code><\/pre>\n<p>5.T\u1ea1o ng\u01b0\u1eddi d\u00f9ng, ch\u1ec9 \u0111\u1ecbnh ch\u1ee7&nbsp;<code>test-events<\/code>\u0111\u1ec1 m\u00e0 n\u00f3 s\u1ebd \u0111\u1ecdc.&nbsp;<code>--from-beginning<\/code>C\u1edd cho bi\u1ebft n\u00f3 s\u1ebd \u0111\u1ecdc t\u1ea5t c\u1ea3 c\u00e1c s\u1ef1 ki\u1ec7n b\u1eaft \u0111\u1ea7u t\u1eeb \u0111\u1ea7u ch\u1ee7 \u0111\u1ec1.<\/p>\n<pre class=\"wp-block-code\"><code>bin\/kafka-console-consumer.sh --topic test-events --from-beginning --bootstrap-server localhost:9092<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: API Consumer c\u1ee7a Kafka cung c\u1ea5p c\u00e1c t\u00f9y ch\u1ecdn \u0111\u1ec3 \u0111\u1ecbnh d\u1ea1ng c\u00e1c s\u1ef1 ki\u1ec7n \u0111\u1ebfn. Ch\u1ea1y l\u1ec7nh sau \u0111\u1ec3 xem danh s\u00e1ch \u0111\u1ea7y \u0111\u1ee7.<code>bin\/kafka-console-consumer.sh<\/code><\/p>\n<p>6.Ng\u01b0\u1eddi d\u00f9ng ngay l\u1eadp t\u1ee9c th\u0103m d\u00f2 Kafka v\u1ec1 b\u1ea5t k\u1ef3 s\u1ef1 ki\u1ec7n n\u1ed5i b\u1eadt n\u00e0o trong ch\u1ee7 \u0111\u1ec1 v\u00e0 hi\u1ec3n th\u1ecb ch\u00fang tr\u00ean m\u00e0n h\u00ecnh. B\u1ea1n s\u1ebd c\u00f3 th\u1ec3 th\u1ea5y t\u1ea5t c\u1ea3 c\u00e1c s\u1ef1 ki\u1ec7n b\u1ea1n \u0111\u00e3 g\u1eedi tr\u01b0\u1edbc \u0111\u00f3.<\/p>\n<pre class=\"wp-block-code\"><code>key1: This is event 1\nkey2: This is event 2\nkey1: This is event 3<\/code><\/pre>\n<p>7.Quay l\u1ea1i b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n c\u1ee7a nh\u00e0 s\u1ea3n xu\u1ea5t (nh\u00e0 s\u1ea3n xu\u1ea5t v\u1eabn \u0111ang ch\u1ea1y) v\u00e0 t\u1ea1o m\u1ed9t s\u1ef1 ki\u1ec7n m\u1edbi kh\u00e1c.<\/p>\n<pre class=\"wp-block-code\"><code>key2: This is event 4<\/code><\/pre>\n<p>8.S\u1ef1 ki\u1ec7n s\u1ebd xu\u1ea5t hi\u1ec7n ngay l\u1eadp t\u1ee9c tr\u00ean b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n c\u1ee7a ng\u01b0\u1eddi d\u00f9ng.<\/p>\n<pre class=\"wp-block-code\"><code>key2: This is event 4\n<\/code><\/pre>\n<p>9.D\u1eebng nh\u00e0 s\u1ea3n xu\u1ea5t ho\u1eb7c ng\u01b0\u1eddi ti\u00eau d\u00f9ng b\u1ea5t c\u1ee9 l\u00fac n\u00e0o b\u1ea1n mu\u1ed1n b\u1eb1ng m\u1ed9t&nbsp;<code>Ctrl-C<\/code>l\u1ec7nh.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: S\u1ef1 ki\u1ec7n c\u00f3 \u0111\u1ed9 b\u1ec1n v\u00e0 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c \u0111\u1ecdc nhi\u1ec1u l\u1ea7n t\u00f9y \u00fd. B\u1ea1n c\u00f3 th\u1ec3 t\u1ea1o ng\u01b0\u1eddi d\u00f9ng th\u1ee9 hai cho c\u00f9ng m\u1ed9t ch\u1ee7 \u0111\u1ec1 v\u00e0 y\u00eau c\u1ea7u ng\u01b0\u1eddi d\u00f9ng \u0111\u00f3 \u0111\u1ecdc t\u1ea5t c\u1ea3 c\u00e1c s\u1ef1 ki\u1ec7n gi\u1ed1ng nhau.<\/p>\n<h2 id=\"process-data-with-kafka-streams\">X\u1eed l\u00fd d\u1eef li\u1ec7u v\u1edbi Kafka Streams<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-kafka-on-ubuntu\/#process-data-with-kafka-streams\"><\/a><\/h2>\n<p>Kafka Streams l\u00e0 m\u1ed9t th\u01b0 vi\u1ec7n \u0111\u1ec3 th\u1ef1c hi\u1ec7n c\u00e1c chuy\u1ec3n \u0111\u1ed5i v\u00e0 ph\u00e2n t\u00edch theo th\u1eddi gian th\u1ef1c tr\u00ean m\u1ed9t lu\u1ed3ng. \u1ee8ng d\u1ee5ng Kafka Streams th\u01b0\u1eddng ho\u1ea1t \u0111\u1ed9ng nh\u01b0 m\u1ed9t ng\u01b0\u1eddi ti\u00eau d\u00f9ng v\u00e0 m\u1ed9t nh\u00e0 s\u1ea3n xu\u1ea5t. N\u00f3 th\u0103m d\u00f2 m\u1ed9t ch\u1ee7 \u0111\u1ec1 \u0111\u1ec3 t\u00ecm s\u1ef1 ki\u1ec7n m\u1edbi, x\u1eed l\u00fd d\u1eef li\u1ec7u v\u00e0 truy\u1ec1n \u0111\u1ea7u ra c\u1ee7a n\u00f3 d\u01b0\u1edbi d\u1ea1ng s\u1ef1 ki\u1ec7n \u0111\u1ebfn m\u1ed9t ch\u1ee7 \u0111\u1ec1 th\u1ee9 hai. C\u00e1c \u1ee9ng d\u1ee5ng kh\u00e1c l\u00e0 ng\u01b0\u1eddi ti\u00eau d\u00f9ng c\u1ee7a ch\u1ee7 \u0111\u1ec1 th\u1ee9 hai n\u00e0y. Kafka Streams \u0111\u01b0\u1ee3c gi\u1ea3i th\u00edch trong&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/what-is-apache-kafka\">Gi\u1edbi thi\u1ec7u v\u1ec1 Apache Kafka c\u1ee7a Linode<\/a>&nbsp;.<\/p>\n<p>B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng&nbsp;<code>WordCountDemo<\/code>\u1ee9ng d\u1ee5ng Java \u0111i k\u00e8m v\u1edbi Kafka Streams \u0111\u1ec3 ch\u1ea1y b\u1ea3n demo nhanh.&nbsp;<code>WordCountDemo<\/code>s\u1eed d\u1ee5ng&nbsp;<code>streams-plaintext-input<\/code>c\u00e1c s\u1ef1 ki\u1ec7n. N\u00f3 ph\u00e2n t\u00edch v\u00e0 x\u1eed l\u00fd c\u00e1c d\u00f2ng, l\u01b0u tr\u1eef c\u00e1c t\u1eeb v\u00e0 s\u1ed1 l\u01b0\u1ee3ng trong m\u1ed9t b\u1ea3ng. S\u1ed1 l\u01b0\u1ee3ng t\u1eeb \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt \u0111\u01b0\u1ee3c chuy\u1ec3n \u0111\u1ed5i th\u00e0nh m\u1ed9t lu\u1ed3ng s\u1ef1 ki\u1ec7n v\u00e0 \u0111\u01b0\u1ee3c g\u1eedi \u0111\u1ebfn ch\u1ee7&nbsp;<code>streams-plaintext-input<\/code>\u0111\u1ec1. To\u00e0n b\u1ed9 t\u1ec7p \u0111\u01b0\u1ee3c bao g\u1ed3m b\u00ean d\u01b0\u1edbi.<\/p>\n<pre class=\"wp-block-code\"><code>\/\/ Serializers\/deserializers (serde) for String and Long types\nfinal Serde&lt;String&gt; stringSerde = Serdes.String();\nfinal Serde&lt;Long&gt; longSerde = Serdes.Long();\n\n\/\/ Construct a `KStream` from the input topic \"streams-plaintext-input\", where message values\n\/\/ represent lines of text (for the sake of this example, we ignore whatever may be stored\n\/\/ in the message keys).\nKStream&lt;String, String&gt; textLines = builder.stream(\n      \"streams-plaintext-input\",\n      Consumed.with(stringSerde, stringSerde)\n    );\n\nKTable&lt;String, Long&gt; wordCounts = textLines\n    \/\/ Split each text line, by whitespace, into words.\n    .flatMapValues(value -&gt; Arrays.asList(value.toLowerCase().split(\"\\\\W+\")))\n\n    \/\/ Group the text words as message keys\n    .groupBy((key, value) -&gt; value)\n\n    \/\/ Count the occurrences of each word (message key).\n    .count();\n\n\/\/ Store the running counts as a changelog stream to the output topic.\nwordCounts.toStream().to(\"streams-wordcount-output\", Produced.with(Serdes.String(), Serdes.Long()));<\/code><\/pre>\n<p>1.T\u1ea1o m\u1ed9t ch\u1ee7 \u0111\u1ec1 tr\u00ean c\u1ee5m Kafka \u0111\u1ec3 l\u01b0u tr\u1eef d\u1eef li\u1ec7u s\u1ed1 l\u01b0\u1ee3ng t\u1eeb m\u1eabu.<\/p>\n<pre class=\"wp-block-code\"><code>cd \/home\/kafka\/kafka_2.13-3.7.0\/\nbin\/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic streams-plaintext-input<\/code><\/pre>\n<p>Kafka x\u00e1c nh\u1eadn \u0111\u00e3 t\u1ea1o ra ch\u1ee7 \u0111\u1ec1 n\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>Created topic streams-plaintext-input.\n<\/code><\/pre>\n<p>2.T\u1ea1o ch\u1ee7 \u0111\u1ec1 th\u1ee9 hai \u0111\u1ec3 l\u01b0u tr\u1eef \u0111\u1ea7u ra c\u1ee7a \u1ee9ng d\u1ee5ng Kafka Streams. \u0110\u1eb7t ch\u00ednh s\u00e1ch d\u1ecdn d\u1eb9p th\u00e0nh m\u1ee5c nh\u1eadp nh\u1ecf g\u1ecdn \u0111\u1ec3 ch\u1ec9 l\u01b0u tr\u1eef s\u1ed1 l\u01b0\u1ee3ng t\u1eeb \u0111\u00e3 c\u1eadp nh\u1eadt.<\/p>\n<pre class=\"wp-block-code\"><code>bin\/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic streams-wordcount-output --config cleanup.policy=compact<\/code><\/pre>\n<p>Kafka m\u1ed9t l\u1ea7n n\u1eefa kh\u1eb3ng \u0111\u1ecbnh ch\u00ednh n\u00f3 \u0111\u00e3 t\u1ea1o ra ch\u1ee7 \u0111\u1ec1:<\/p>\n<pre class=\"wp-block-code\"><code>Created topic streams-wordcount-output.<\/code><\/pre>\n<p>3.Ch\u1ea1y&nbsp;<code>WordCountDemo<\/code>\u1ee9ng d\u1ee5ng.<\/p>\n<pre class=\"wp-block-code\"><code>bin\/kafka-run-class.sh org.apache.kafka.streams.examples.wordcount.WordCountDemo<\/code><\/pre>\n<p>4.Kh\u1edfi ch\u1ea1y tr\u00ecnh s\u1ea3n xu\u1ea5t \u0111\u1ec3 g\u1eedi d\u1eef li\u1ec7u th\u1eed nghi\u1ec7m t\u1edbi lu\u1ed3ng WordCountDemo d\u01b0\u1edbi d\u1ea1ng&nbsp;<code>streams-plaintext-input<\/code>s\u1ef1 ki\u1ec7n.<\/p>\n<pre class=\"wp-block-code\"><code>cd \/home\/kafka\/kafka_2.13-3.7.0\/\nbin\/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic streams-plaintext-input<\/code><\/pre>\n<p>5.T\u1ea1o m\u1ed9t consumer \u0111\u1ec3 l\u1eafng nghe&nbsp;<code>streams-wordcount-output<\/code>lu\u1ed3ng. Lu\u1ed3ng n\u00e0y ch\u1ee9a c\u00e1c k\u1ebft qu\u1ea3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt c\u1ee7a \u1ee9ng&nbsp;<code>WordCountDemo<\/code>d\u1ee5ng. \u0110\u1eb7t c\u00e1c thu\u1ed9c t\u00ednh \u0111\u1ecbnh d\u1ea1ng nh\u01b0 sau \u0111\u1ec3 t\u1ea1o ra \u0111\u1ea7u ra d\u1ec5 \u0111\u1ecdc h\u01a1n.<\/p>\n<pre class=\"wp-block-code\"><code>cd \/home\/kafka\/kafka_2.13-3.7.0\/\nbin\/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic streams-wordcount-output --from-beginning --formatter kafka.tools.DefaultMessageFormatter --property print.key=true --property print.value=true --property key.deserializer=org.apache.kafka.common.serialization.StringDeserializer --property value.deserializer=org.apache.kafka.common.serialization.LongDeserializer<\/code><\/pre>\n<p>Nh\u1eadp m\u1ed9t s\u1ed1 d\u1eef li\u1ec7u th\u1eed nghi\u1ec7m t\u1ea1i d\u1ea5u nh\u1eafc c\u1ee7a nh\u00e0 s\u1ea3n xu\u1ea5t.<\/p>\n<pre class=\"wp-block-code\"><code>This is not the end<\/code><\/pre>\n<p>X\u00e1c minh s\u1ed1 l\u01b0\u1ee3ng t\u1eeb \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb trong c\u1eeda s\u1ed5 ng\u01b0\u1eddi d\u00f9ng.<\/p>\n<pre class=\"wp-block-code\"><code>this    1\nis      1\nnot     1\nthe     1\nend     1<\/code><\/pre>\n<p>8.S\u1eed d\u1ee5ng tr\u00ecnh s\u1ea3n xu\u1ea5t \u0111\u1ec3 vi\u1ebft th\u00eam d\u1eef li\u1ec7u \u0111\u1ea7u v\u00e0o th\u1eed nghi\u1ec7m.<\/p>\n<pre class=\"wp-block-code\"><code>The end of the line<\/code><\/pre>\n<p>Xem l\u1ea1i k\u1ebft qu\u1ea3 m\u1edbi t\u1eeb ng\u01b0\u1eddi ti\u00eau d\u00f9ng. L\u01b0u \u00fd c\u00e1ch s\u1ed1 l\u01b0\u1ee3ng t\u1eeb \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.<\/p>\n<pre class=\"wp-block-code\"><code>the     2\nend     2\nof      1\nthe     3\nline    1<\/code><\/pre>\n<p>10.Khi b\u1ea1n ho\u00e0n t\u1ea5t b\u1ea3n demo, h\u00e3y s\u1eed d\u1ee5ng&nbsp;<code>Ctrl-C<\/code>\u0111\u1ec3 d\u1eebng nh\u00e0 s\u1ea3n xu\u1ea5t, ng\u01b0\u1eddi ti\u00eau d\u00f9ng v\u00e0 \u1ee9ng d\u1ee5ng WordCountDemo.<\/p>\n<h2 id=\"create-system-files-for-zookeeper-and-kafka\">T\u1ea1o t\u1eadp tin h\u1ec7 th\u1ed1ng cho Zookeeper v\u00e0 Kafka<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-kafka-on-ubuntu\/#create-system-files-for-zookeeper-and-kafka\"><\/a><\/h2>\n<p>Cho \u0111\u1ebfn b\u00e2y gi\u1edd, b\u1ea1n \u0111\u00e3 kh\u1edfi \u0111\u1ed9ng Zookeeper v\u00e0 Kafka t\u1eeb d\u00f2ng l\u1ec7nh b\u00ean trong th\u01b0 m\u1ee5c Kafka. \u0110i\u1ec1u n\u00e0y ho\u00e0n to\u00e0n ch\u1ea5p nh\u1eadn \u0111\u01b0\u1ee3c, nh\u01b0ng s\u1ebd d\u1ec5 d\u00e0ng h\u01a1n nhi\u1ec1u n\u1ebfu t\u1ea1o c\u00e1c m\u1ee5c nh\u1eadp cho ch\u00fang b\u00ean trong&nbsp;<code>\/etc\/systemd\/system\/<\/code>v\u00e0 kh\u1edfi \u0111\u1ed9ng ch\u00fang b\u1eb1ng&nbsp;<code>systemctl enable<\/code>.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: N\u1ebfu Kafka v\u00e0 Zookeeper v\u1eabn \u0111ang ch\u1ea1y, h\u00e3y t\u1eaft ch\u00fang b\u1eb1ng t\u1ed5 h\u1ee3p ph\u00edm&nbsp;<kbd>CTRL<\/kbd>+&nbsp;<kbd>C<\/kbd> tr\u01b0\u1edbc khi th\u1ef1c hi\u1ec7n theo c\u00e1c b\u01b0\u1edbc d\u01b0\u1edbi \u0111\u00e2y.<\/p>\n<p>1.T\u1ea1o m\u1ed9t t\u1ec7p h\u1ec7 th\u1ed1ng cho Zookeeper c\u00f3 t\u00ean l\u00e0&nbsp;<code>\/etc\/systemd\/system\/zookeeper.service<\/code>.<\/p>\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/systemd\/system\/zookeeper.service<\/code><\/pre>\n<p>2.Ch\u1ec9nh s\u1eeda t\u1ec7p v\u00e0 th\u00eam th\u00f4ng tin sau. S\u1eed d\u1ee5ng v\u1ecb tr\u00ed th\u01b0 m\u1ee5c Kafka c\u1ee7a b\u1ea1n trong t\u00ean \u0111\u01b0\u1eddng d\u1eabn.<\/p>\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=Apache Zookeeper Server\nRequires=network.target remote-fs.target\nAfter=network.target remote-fs.target\n\n&#91;Service]\nType=simple\nExecStart=\/home\/kafka\/kafka_2.13-3.7.0\/bin\/zookeeper-server-start.sh \/home\/kafka\/kafka_2.13-3.7.0\/config\/zookeeper.properties\nExecStop=\/home\/kafka\/kafka_2.13-3.7.0\/bin\/zookeeper-server-stop.sh\n\nRestart=on-abnormal\n\n&#91;Install]\nWantedBy=multi-user.target<\/code><\/pre>\n<p>3.T\u1ea1o t\u1ec7p th\u1ee9 hai cho m\u00e1y ch\u1ee7 Kafka c\u00f3 t\u00ean l\u00e0&nbsp;<code>\/etc\/systemd\/system\/kafka.service<\/code>.<\/p>\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/systemd\/system\/kafka.service<\/code><\/pre>\n<p>4.Ch\u1ec9nh s\u1eeda t\u1ec7p v\u00e0 th\u00eam th\u00f4ng tin sau. X\u00e1c minh \u0111\u01b0\u1eddng d\u1eabn \u0111\u1ea7y \u0111\u1ee7 \u0111\u1ebfn \u1ee9ng d\u1ee5ng Java c\u1ee7a b\u1ea1n v\u00e0 nh\u1eadp n\u00f3 l\u00e0m \u0111\u01b0\u1eddng&nbsp;<code>JAVA_HOME<\/code>d\u1eabn.<\/p>\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=Apache Kafka Server\nRequires=zookeeper.service\nAfter=zookeeper.service\n\n&#91;Service]\nType=simple\nEnvironment=\"JAVA_HOME=\/usr\/lib\/jvm\/java-21-openjdk-amd64\"\nExecStart=\/home\/kafka\/kafka_2.13-3.7.0\/bin\/kafka-server-start.sh \/home\/kafka\/kafka_2.13-3.7.0\/config\/server.properties\nExecStop=\/home\/kafka\/kafka_2.13-3.7.0\/bin\/kafka-server-stop.sh\n\nRestart=on-abnormal\n\n&#91;Install]\nWantedBy=multi-user.target<\/code><\/pre>\n<p>5.T\u1ea3i l\u1ea1i&nbsp;<code>systemd<\/code>daemon v\u00e0 kh\u1edfi \u0111\u1ed9ng c\u1ea3 hai \u1ee9ng d\u1ee5ng.<\/p>\n<pre class=\"wp-block-code\"><code>sudo systemctl daemon-reload\nsudo systemctl enable --now zookeeper\nsudo systemctl enable --now kafka<\/code><\/pre>\n<p>6.X\u00e1c nh\u1eadn c\u1ea3 Kafka v\u00e0 Zookeeper \u0111\u1ec1u \u0111ang ch\u1ea1y nh\u01b0 mong \u0111\u1ee3i. X\u00e1c minh tr\u1ea1ng th\u00e1i c\u1ee7a c\u1ea3 hai quy tr\u00ecnh b\u1eb1ng&nbsp;<code>systemctl status<\/code>.<\/p>\n<pre class=\"wp-block-code\"><code>sudo systemctl status kafka zookeeper<\/code><\/pre>\n<p>C\u1ea3 hai m\u1ee5c nh\u1eadp \u0111\u1ec1u ph\u1ea3i hi\u1ec3n th\u1ecb l\u00e0 \u0111ang ho\u1ea1t \u0111\u1ed9ng.<\/p>\n<pre class=\"wp-block-code\"><code>kafka.service - Apache Kafka Server\n    Loaded: loaded (\/etc\/systemd\/system\/kafka.service; enabled; vendor preset: enabled)\n    Active: active (running) since Thu 2021-01-21 15:13:45 UTC; 4s ago\n...<\/code><\/pre>\n<h2 id=\"shut-down-the-kafka-environment\">T\u1eaft m\u00f4i tr\u01b0\u1eddng Kafka<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-kafka-on-ubuntu\/#shut-down-the-kafka-environment\"><\/a><\/h2>\n<p>Khi b\u1ea1n ho\u00e0n t\u1ea5t vi\u1ec7c s\u1eed d\u1ee5ng Kafka, ch\u00fang t\u00f4i khuy\u00ean b\u1ea1n n\u00ean t\u1eaft t\u1ea5t c\u1ea3 c\u00e1c th\u00e0nh ph\u1ea7n v\u00e0 x\u00f3a m\u1ecdi nh\u1eadt k\u00fd kh\u00f4ng c\u1ea7n thi\u1ebft.<\/p>\n<p>1.T\u1eaft m\u1ecdi tr\u00ecnh ti\u00eau th\u1ee5 v\u00e0 tr\u00ecnh s\u1ea3n xu\u1ea5t Kafka c\u0169ng nh\u01b0 m\u1ecdi \u1ee9ng d\u1ee5ng Kafka Streams b\u1eb1ng&nbsp;<code>ctrl-C<\/code>l\u1ec7nh.<\/p>\n<p>2.T\u1eaft Kafka v\u00e0 sau \u0111\u00f3 l\u00e0 Zookeeper b\u1eb1ng&nbsp;<code>systemctl stop<\/code>l\u1ec7nh. N\u1ebfu b\u1ea1n kh\u00f4ng \u0111\u0103ng k\u00fd \u1ee9ng d\u1ee5ng Kafka c\u1ee7a m\u00ecnh v\u1edbi&nbsp;<code>systemd<\/code>daemon, h\u00e3y t\u1eaft ch\u00fang b\u1eb1ng&nbsp;<code>Ctrl-C<\/code>l\u1ec7nh.<\/p>\n<pre class=\"wp-block-code\"><code>sudo systemctl stop kafka\nsudo systemctl stop zookeeper<\/code><\/pre>\n<p>D\u1ecdn s\u1ea1ch m\u1ecdi d\u1eef li\u1ec7u th\u1eed nghi\u1ec7m b\u1eb1ng l\u1ec7nh sau:<\/p>\n<pre class=\"wp-block-code\"><code>sudo rm -rf \/tmp\/kafka-logs \/tmp\/zookeeper<\/code><\/pre>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"https:\/\/kafka.apache.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Apache Kafka<\/a><\/li>\n<li><a href=\"https:\/\/kafka.apache.org\/downloads\" target=\"_blank\" rel=\"noreferrer noopener\">T\u1ea3i xu\u1ed1ng Apache Kafka<\/a><\/li>\n<li><a href=\"https:\/\/www.apache.org\/info\/verification.html\" target=\"_blank\" rel=\"noreferrer noopener\">Trang x\u00e1c th\u1ef1c Apache Kafka<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-kafka-on-ubuntu\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apache Kafka&nbsp;, th\u01b0\u1eddng \u0111\u01b0\u1ee3c g\u1ecdi \u0111\u01a1n gi\u1ea3n l\u00e0 Kafka, l\u00e0 m\u1ed9t n\u1ec1n t\u1ea3ng m\u00e3 ngu\u1ed3n m\u1edf ph\u1ed5 bi\u1ebfn \u0111\u1ec3 qu\u1ea3n l\u00fd v\u00e0 x\u1eed l\u00fd lu\u1ed3ng. Kafka \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng xung quanh kh\u00e1i ni\u1ec7m v\u1ec1 m\u1ed9t s\u1ef1 ki\u1ec7n. C\u00e1c t\u00e1c nh\u00e2n b\u00ean ngo\u00e0i, \u0111\u1ed9c l\u1eadp v\u00e0 kh\u00f4ng \u0111\u1ed3ng b\u1ed9, g\u1eedi v\u00e0 nh\u1eadn th\u00f4ng b\u00e1o s\u1ef1 ki\u1ec7n<\/p>\n","protected":false},"author":1,"featured_media":35494,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[101],"tags":[],"class_list":["post-34873","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-big-data"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34873","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=34873"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34873\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35494"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}