Hôm nay mình sẽ hướng dẫn các bạn cài đặt Apache Kafka, một messaging system đang được công ty công nghệ quan tâm và sử dụng. Các anh lớn trong làng Big Data đang dùng Kafka có thể kể đến như LINE(mạng xã hội phổ biến ở Nhật và Hàn Quốc, từng vào Việt Nam nhưng thất bại ê chề và về nước rồi :v) đã và đang dùng Kafka như một central datahub cho việc kết nối các service của họ, hơn một trăm tỷ record đang được LINE xử lý hàng ngày, và số record đó sẽ còn tăng nữa theo thời gian. Hay Uber (kỳ lân công nghệ tỷ đô, à mà vẫn đại bại ở Việt Nam nhường sân cho anh Gờ ráp rồi cũng đang dùng Kafka làm core cho cơ sở hạ tầng của họ, phục vụ xử lý các record ở mức near real-time. Ngoài ra còn hàng loạt các công ty khác như Coursera, Hacker Rank, Linkedlin, Netflix, Twitter, Yahoo …. Các bạn có thể xem thêm ở đây. Các công ty trên chọn Kafka vì họ thường là startup kỳ lân, có tốc độ tăng lượng user chóng mặt, dẫn đến bài toán khó khăn trong việc mở rộng hệ thống, và Kafka là cách họ giải quyết bài toán ấy. Tuy nhiên các bạn có thấy mấy công ty xài Kafka mình kể toàn thua sấp mặt ở Việt Nam không (Uber zs LINE), chắc nghiệp rồi.
Nói chút về lý thuyết nhé, như đã giới thiệu, Kafka là messaging system, vậy messaging system là gì ? Hệ thống truyền thông điệp (messaging system) là một công cụ, chịu trách nhiệm cho việc vận chuyển dữ liệu giữa các ứng dụng. Từ đó ứng dụng chỉ cần quan tâm đến dữ liệu, thuật toán, mà không cần quan tâm đến việc chia sẽ dữ liệu với nhau. Tuy nhiên các messaging system truyền thống có khá nhiều nhược điểm như:
- Nhiều hệ thống không tập trung mạnh vào thiết kế cho thông lượng cao. Ví dụ: JMS không có API để cho phép producer gom message thành từng bó (batch) cho một request.
- Các hệ thống truyền thống lại quá tập trung vào đảm bảo toàn vẹn gói tin. Ví dụ như JMS chấp nhập gửi acknowledgement cho mỗi một message riêng lẻ.
- Các hệ thống chưa hỗ trợ (hoặc hỗ trợ yếu) khả năng chạy phân tán (như RabbitMQ, ActiveMQ). Rất khó để phân vùng và lưu trữ tin nhắn trên nhiều máy.
Apache Kafka ra đời để khắc phục các yếu điểm đã nêu. Tuy nhiên để hiểu vì sao Kafka lại có thể dẹp đi các nhược điểm đã nêu, ta phải đi sau vào kiến trúc của Kafka. Mình sẽ nói về kiến trúc Kafka trong những bài viết sau nhé. Bắt tay vào cài Kafka trước rồi tính nè.
Cài đặt Java Development Kit
Vì kafka cần Java Runtime Enviroment (JRE) để chạy, nên chúng ta sẽ cài đặt OpenJDK. Ở bài viết này, mình cài phiên bản 1.8, để cài đặt ta gõ lệnh sau :
1 2 | sudo apt install openjdk-8-jdk |
Để kiểm tra việc cài đặt OpenJDK thành công hay chưa ta gõ lệnh java -version
. Nếu output terminal tương tự như sau thì ta thành công.
1 2 3 4 | openjdk version <span class="token string">"1.8.0_212"</span> OpenJDK Runtime Environment <span class="token punctuation">(</span>build <span class="token number">1.8</span><span class="token punctuation">.</span><span class="token number">0</span>_212<span class="token operator">-</span><span class="token number">8</span>u212<span class="token operator">-</span>b03<span class="token operator">-</span><span class="token number">0</span>ubuntu1<span class="token punctuation">.</span><span class="token number">18.04</span><span class="token number">.1</span><span class="token operator">-</span>b03<span class="token punctuation">)</span> OpenJDK <span class="token number">64</span><span class="token operator">-</span><span class="token keyword">Bit</span> Server VM <span class="token punctuation">(</span>build <span class="token number">25.212</span><span class="token operator">-</span>b03<span class="token punctuation">,</span> mixed <span class="token keyword">mode</span><span class="token punctuation">)</span> |
Đặt biến môi trường cho JAVA
Đầu tiên ta tìm thư mục chứa OpenJDK ta vừa cài bằng lệnh
1 2 | <span class="token variable"><span class="token variable">$(</span><span class="token function">dirname</span> <span class="token punctuation">$(</span>dirname <span class="token punctuation">$(</span>readlink -f <span class="token punctuation">$(</span>which javac<span class="token variable">)</span></span><span class="token punctuation">))</span><span class="token punctuation">)</span> |
Ta được đường dẫn /usr/lib/jvm/java-8-openjdk-amd64/
Để gán biến môi trường, ta chỉ đơn giản thêm dòng sau vào cuối file ~/.bashrc
:
1 2 | <span class="token function">export</span> JAVA_HOME<span class="token operator">=</span><span class="token string">"/usr/lib/jvm/java-8-openjdk-amd64/"</span> |
Để kiểm tra việc cài biến môi trường thành công hay chưa ? Ta tải lại(reload) file .bashrc
bằng lệnh . ~/.bashrc
. Bây giờ ta in ra biến môi trường bằng lệnh echo $JAVA_HOME
nếu output terminal tương tự như sau thì ta thành công.
1 2 | /usr/lib/jvm/java-8-openjdk-amd64/ |
Tải về công cụ Apache Kafka
Ở bài viết này mình sẽ tải Apache Kafka 2.2.0 sử dựng Scala 2.1.2
1 2 | wget http<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>mirrors<span class="token punctuation">.</span>viethosting<span class="token punctuation">.</span>com<span class="token operator">/</span>apache<span class="token operator">/</span>kafka<span class="token operator">/</span><span class="token number">2.2</span><span class="token number">.0</span><span class="token operator">/</span>kafka_2<span class="token punctuation">.</span><span class="token number">12</span><span class="token operator">-</span><span class="token number">2.2</span><span class="token number">.0</span><span class="token punctuation">.</span>tgz |
Ta gia nén file vừa tải về, bạn có thể chuyển thư mục vừa giải nén vào vị trí tùy ý. Mình đặt nó và ~/server/
1 2 | tar -zxvf kafka_2.12-2.2.0.tgz |
Cài biến môi trường cho Kafka
Tương tự như cài biến môi trường cho JAVA, ta chỉ đơn giản thêm dòng sau vào cuối file ~/.bashrc
1 2 | <span class="token keyword">export</span> <span class="token constant">KAFKA_HOME</span><span class="token operator">=</span><span class="token string">"/root/server/kafka_2.12-2.2.0/"</span> |
Địa chỉ thư mục có thể thay đổi tùy theo máy. Để kiểm tra việc cài biến môi trường thành công hay chưa ? Ta tải lại(reload) file .bashrc
bằng lệnh . ~/.bashrc
. Bây giờ ta in ra biến môi trường bằng lệnh echo $KAFKA_HOME
nếu output terminal tương tự như sau thì ta thành công.
1 2 | /root/server/kafka_2.12-2.2.0/ |
Vậy là cài xong rồi á. Các thao tác khởi chạy các Kafka Broker, các gửi message bằng Kafka thông qua API, hay kết nối Kafka với các công cụ khác (như Spark, Hadoop …) sẽ được mình chia sẽ ở bài viết sau nhé. Cám ơn các bạn đã đọc bài viết của mình. Các bạn có góp ý sửa sai thì comment cho mình biết nhé.