# Bài 3: Cài đặt Kafka

### Mục tiêu

Cài đặt và cấu hình một Kafka cluster.

### Nội dung chính

#### Cài đặt Kafka trên môi trường local

1. **Yêu cầu hệ thống**:
    
    * Java 8+ đã được cài đặt và cấu hình biến môi trường `JAVA_HOME`.
        
2. **Tải xuống Kafka**:
    
    * Truy cập trang [Apache Kafka Downloads](https://kafka.apache.org/downloads) và tải xuống phiên bản Kafka mới nhất.
        
3. **Giải nén Kafka**:
    
    ```sh
    tar -xzf kafka_2.13-2.8.0.tgz
    cd kafka_2.13-2.8.0
    ```
    
4. **Cấu hình Zookeeper**:
    
    * Mở file cấu hình Zookeeper:
        
        ```sh
        nano config/zookeeper.properties
        ```
        
    * Đảm bảo các thông số chính như sau:
        
        ```java
        dataDir=/tmp/zookeeper
        clientPort=2181
        maxClientCnxns=0
        ```
        
5. **Cấu hình Kafka broker**:
    
    * Mở file cấu hình Kafka:
        
        ```sh
        nano config/server.properties
        ```
        
    * Đảm bảo các thông số chính như sau:
        
        ```java
        broker.id=0
        log.dirs=/tmp/kafka-logs
        zookeeper.connect=localhost:2181
        ```
        
6. **Khởi động Zookeeper**:
    
    ```sh
    bin/zookeeper-server-start.sh config/zookeeper.properties
    ```
    
7. **Khởi động Kafka broker**:
    
    ```sh
    bin/kafka-server-start.sh config/server.properties
    ```
    

#### Cài đặt Kafka trên Docker

1. **Tạo Docker Compose file**:
    
    ```yaml
    version: '2'
    services:
      zookeeper:
        image: wurstmeister/zookeeper
        ports:
          - "2181:2181"
      kafka:
        image: wurstmeister/kafka
        ports:
          - "9092:9092"
        environment:
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    ```
    
2. **Chạy Docker Compose**:
    
    ```sh
    docker-compose up -d
    ```
    

#### Cấu hình Kafka broker và Zookeeper

1. **Cấu hình Kafka broker**:
    
    * Sửa file [`server.properties`](http://server.properties) trong container Kafka nếu cần:
        
        ```sh
        docker exec -it <kafka-container-id> /bin/bash
        nano config/server.properties
        ```
        
2. **Cấu hình Zookeeper**:
    
    * Sửa file [`zookeeper.properties`](http://zookeeper.properties) trong container Zookeeper nếu cần:
        
        ```sh
        docker exec -it <zookeeper-container-id> /bin/bash
        nano config/zookeeper.properties
        ```
        

### Thực hành

#### Thiết lập và khởi động một Kafka cluster đơn giản

1. **Khởi động Zookeeper**:
    
    ```sh
    bin/zookeeper-server-start.sh config/zookeeper.properties
    ```
    
2. **Khởi động Kafka broker**:
    
    ```sh
    bin/kafka-server-start.sh config/server.properties
    ```
    
3. **Kiểm tra trạng thái Kafka broker**:
    
    * Sử dụng lệnh sau để liệt kê các broker đang hoạt động:
        
        ```sh
        bin/zookeeper-shell.sh localhost:2181
        ls /brokers/ids
        ```
        

#### Xác minh Kafka broker và Zookeeper đang hoạt động

1. **Tạo một topic mới**:
    
    ```sh
    bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
    ```
    
2. **Liệt kê các topic**:
    
    ```sh
    bin/kafka-topics.sh --list --bootstrap-server localhost:9092
    ```
    
3. **Gửi message tới topic**:
    
    ```sh
    bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
    ```
    
4. **Nhận message từ topic**:
    
    ```sh
    bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
    ```
    

Với các bước trên, bạn đã cài đặt và cấu hình thành công một Kafka cluster đơn giản trên cả môi trường local và Docker. Bạn cũng đã xác minh rằng các thành phần chính như Kafka broker và Zookeeper đang hoạt động chính xác. Trong bài tiếp theo, chúng ta sẽ đi sâu hơn vào cách tương tác với Kafka qua các API và thực hành thêm nhiều bài tập hơn.
