- vừa được xem lúc

Thực hành setup cụm kafka trên AWS EC2 Phần 2:

0 0 17

Người đăng: Thịnh Lang

Theo Viblo Asia

Tác giả: https://www.facebook.com/lang.thinh.146/

Source: https://github.com/quocthinh861/kafka-zookeeper-cluster.git

Ở bài viết trước, chúng ta đã setup xong cụm zookeeper bao gồm 3 servers chạy trên 3 AZ khác nhau, bài viết này sẽ tiếp tục tạo thêm 3 con trên 3 AZ còn lại để tạo cụm boostrap server nhé

Kiến trúc Kafka

Nói sơ qua một tí, Kafka sử dụng Zookeeper để gửi các message đến các server (hay còn được gọi là broker) thông qua topic. Các topic này sẽ có số bản sao (replication factor) và sẽ được phân tán trên khắp broker. Trong phạm vi bài lab này, mô hình của chúng ta sẽ như sau:

Có thể thấy rằng chúng ta có 3 broker, với cách setup như thế này nếu trong tính huống 1 con broker bị shutdow thì dữ liệu của chúng ta tại thời điểm đó vẫn được bảo toàn, nhờ vào cơ chế sao lưu của kafka (N-1 brokers can be down, if N is your default topic replication factor). Dữ liệu được phân tán đều trên cụm, có nghĩa ít bộ nhớ được sử dụng hơn trên từng broker nhưng vẫn có thể bảo toàn tính khả dụng của dữ liệu

Cấu hình Kafka

Để cấu hình cho Kafka thì có rất nhiều setting cho nó, việc setup sao cho phù hợp phụ thuộc vào hạ tầng của bạn. Bài viết này chủ yếu sử dụng các setting mặc định cung cấp bởi Kafka. Bạn có thể đọc file cấu hình Kafka tại đây. Chú ý chúng ta chỉ ra đường dẫn sao lưu dữ liệu và chỉ ra cụm zookeeper đã cài đặt ở bài viết trước

# The id of the broker. This must be set to a unique integer for each broker.
broker.id=1
...
# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181/kafka

Setup Kafka

Trước tiên mình sẽ setup chỉ với 1 server chạy kafka. Đầu tiên các bạn tạo ra 1 instance với AIM đã được tạo sẵn ở bài trước, đặt tên là My Kafka 1, với bài viết trước mình đã tạo 3 server Zookeeper trên 3 subnet khác nhau, với instance này các bạn chọn 1 trong các subnet còn lại, trong ví dụ của mình, mình thiết lập private ip cho nó là 192.168.1.119 (chú ý địa chỉ ip này chính là địa chỉ ip mà các bạn đã set trong bài viết trước /etc/hosts lúc đầu nha)

SSH vào instance, tại đây các bạn đã có sẵn thư mục /kafka với tất cả setup đã được thiết lập sẵn. Để chạy Kafka trước tiên nhìn vào file setting cho nó ở đây . Có rất nhiều thông số cấu hình, mình muốn tập trung vào một số thông số quan trọng sau đây:

Với mỗi Kafka server cần có 1 id riêng biệt broker.id=1

log.dirs=/data/kafka chỉ định nên lưu dữ liệu log

min.insync.replicas=2vì chúng ta chỉ có 1 kafka server nên các bạn sửa lại thành 1 nhé (sửa lại bằng 2 khi ở phía dưới bài viết)

zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181/kafka đây là chuỗi kết nối cụm Zookeeper đã tạo, chú ý chúng ta thêm /kafka ở phía cuối để Zookeeper lưu tất cả dữ liệu cụm kafka ở một thư mục riêng có tên là kafka cho dễ quản lý nha

Bước tiếp theo gắn file setting này thay thế file setting mặc định

# edit kafka configuration
rm config/server.properties
nano config/server.properties

Chạy thử xem sao bin/kafka-server-start.sh config/server.properties.

Đến đây cũng như bài viết trước, mình sẽ biến nó thành service để chạy ngầm, file script có nội dung ở đây

# Install Kafka boot scripts
sudo nano /etc/init.d/kafka
sudo chmod +x /etc/init.d/kafka
sudo chown root:root /etc/init.d/kafka
# you can safely ignore the warning
sudo update-rc.d kafka defaults

Sau đó chúng ta có thể tắt và khởi động như 1 service

# start kafka
sudo service kafka start

Để xác định service đang chạy, các bạn dùng câu lệnh nc -vz localhost 9092

Chúng ta đã setup xong cụm 1 node Kafka rồi, để chạy thử vài câu lệnh xem cụm hoạt động tốt không nhé

Chúng ta tạo ra 1 topic trên server Kafka

# create a topic
bin/kafka-topics.sh --zookeeper zookeeper1:2181/kafka --create --topic first_topic --replication-factor 1 --partitions 3

Vào một trong các con Zookeeper chạy câu lệnh bin/kafka-topics.sh --list --zookeeper localhost:2181, kết quả cho thấy topic được tạo ở trên đã được Zookeeper lưu lại 😘

Vậy là đã hoàn thành xong việc setup cụm Kafka gồm 1 node rồi. Tiếp theo chỉ cần tạo AIM từ instance này và tạo thêm 2 instance trên 2 subnet còn lại giống bài viết trước thế là xong (chú ý file config các bạn sửa lại broker.id cho 2 instance lần lượt 2, 3) 😚Ở bài viết tiếp theo, mình sẽ thực hiện các thao tác gửi nhận dữ liệu trên cụm này nhé !!!

Bình luận

Bài viết tương tự

- vừa được xem lúc

PDF Export, cẩn thận với những input có thể truyền vào

Giới thiệu. Dạo gần đây mình tình cờ gặp rất nhiều lỗi XSS, tuy nhiên trang đó lại có sử dụng dữ liệu người dùng input vào để export ra PDF.

0 0 49

- vừa được xem lúc

Giới thiệu về AWS Batch

Khi sử dụng hệ thống cloud service, điều chúng ta thường phải quan tâm đến không chỉ là hiệu suất hoạt động (performance) mà còn phải chú ý đến cả chi phí bỏ ra để duy trì hoạt động của hệ thống. Chắn hẳn là hệ thống lớn hay nhỏ nào cũng đã từng phải dùng đến những instance chuyên để chạy batch thực

0 0 127

- vừa được xem lúc

Tìm hiểu về AWS KMS

1. AWS KMS là gì. Ở KMS bạn có thể lựa chọn tạo symetric key (khóa đối xứng) hoặc asymetric key (khóa bất đối xứng) để làm CMK (Customer Master Key). Sau khi tạo key thì có thể thiết đặt key policy để control quyền access và sử dụng key.

0 0 52

- vừa được xem lúc

AWS VPC cho người mới bắt đầu

Tuần này, tôi trình bày lại những gì tôi đã học được về Virtual Private Cloud (VPC) của Amazon. Nếu bạn muốn xem những gì tôi đã học được về AWS, hãy xem Tổng quan về DynamoDB và Tổng quan về S3. VPC là gì. Những điều cần lưu ý:.

0 0 68

- vừa được xem lúc

AWS Essentials (Phần 6): Guildline SNS Basic trên AWS

Tiếp tục với chuỗi bài viết về Basic AWS Setting, chúng ta tiếp tục tìm hiểu tiếp tới SNS (Simple Notification Service). Đây là một service của AWS cho phép người dùng setting thực hiện gửi email, text message hay push notification tự động tới mobile device dựa trên event người dùng setting phía AWS

0 0 124

- vừa được xem lúc

Sử dụng Amazon CloudFront Content Delivery Network với Private S3 Bucket — Signing URLs

Trong nhiều trường hợp, thì việc sử dụng CDN là bắt buộc. Mình đã trải nghiệm với một số CDN nhưng cuối cùng mình lựa chọn sử dụng AWS CloudFront.

0 0 104