페이지

2024년 8월 20일 화요일

Kafka Basics

1. Brokers holds topic partitions

2. Brokers receive and serve data

3. Brokers are the unit of parallelism of a Kafka cluster

4. Brokers are the essence of the "distributed" aspect of Kafka


Management tools for Zookeeper

1. You can build your own using the 4 Letter Words

2. Or use one of the following:

    - Netflix Exhibitor (heavily recommended but tedious setup):

    https://github.com/soabase/exhibitor

    - Zookeeper UI (web):

    https://github.com/DeemOpen/zkui

    - Zookeeper GUI(desktop) - Windows binaries available:

    https://github.com/echoma/zkui

    - ZK-web(not updated since July 2016):

    https://github.com/qiuziafei/zk-web

    - ZooNavigator(promising new project):

    https://github.com/elkozmon/zoonavigator


zoonavigator-docker-compose.yml

version: '2'

services:
# https://github.com/elkozmon/zoonavigator
zoonavigator:
image: elkozmon/zoonavigator:latest
container_name: zoonavigator
network_mode: host
environment:
HTTP_PORT: 8001
restart: always

nano zoonavigator-docker-compose.yml
# Make sure port 8001 is opened on the instance security group

# copy the zookeeper/zoonavigator-docker-compose.yml file
# run it
docker-compose -f zoonavigator-docker-compose.yml up -d

docker ps

curl localhost:8001



Hands-On: Web Tools AWS EC2 Machine

1. Start machine with Ubuntu

2. Install Docker and required packages

3. Open up ports

4. Try a Docker hello world


#!/bin/bash
sudo apt-get update

# Install packages to allow apt to use a repository over HTTPS:
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common

# Add Docker’s official GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# set up the stable repository.
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

# install docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-compose

# give ubuntu permissions to execute docker
sudo usermod -aG docker $(whoami)
# log out
exit
# log back in

# make sure docker is working
docker run hello-world

# Add hosts entries (mocking DNS) - put relevant IPs here
echo "172.31.9.1 kafka1
172.31.9.1 zookeeper1
172.31.19.230 kafka2
172.31.19.230 zookeeper2
172.31.35.20 kafka3
172.31.35.20 zookeeper3" | sudo tee --append /etc/hosts



Zookeeper in AWS

1. If you use private IPs, you may have the following error:

http://stackoverflow.com/questions/309409881/zookeeper-error-cannot-open-channel-to-x-at-election-address

2. Use Netflix Exhibitor

3. Reserve your instances if you know you will use them for over a year(decreased cost)

4. Or you can use Amazon EMR to provision a Zookeeper cluster, but you have less control


Zookeeper performance

1. Latency is key for Zookeeper, and any of these variables will affect it:

2. Fast disk(SSD)

3. No RAM Swap

4. Separate disk for snapshots and logs

5. High performance network (low latency)

6. Reasonable number of Zookeeper Servers

7. Islation of Zookeeper instances from other processes

Using Zookeeper Understanding the files created

1. Understanding the files created by Zookeeper on the filesystem

2. Besides myid, the rest of the files should remain untouched. They are managed by Zookeeper

3. /

    - myid: file representing the server id. That's how Zookeeper knows its identity

    - version-2/: folder that holds the zookeeper data

        - AcceptEpoch and CurrentEpoch: internal to Zookeeper

        - Log.X: Zookeeper data files



2024년 8월 18일 일요일

Hands-On: Using Zookeeper Four letter words

1. Examples of using 4LW (Four Letter Words)


2. https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sczkCommands


# https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands
# conf
# New in 3.3.0: Print details about serving configuration.
echo "conf" | nc localhost 2181


# cons
# New in 3.3.0: List full connection/session details for all clients connected to this server. Includes information on numbers of packets received/sent, session id, operation latencies, last operation performed, etc...
echo "cons" | nc localhost 2181


# dump
# Lists the outstanding sessions and ephemeral nodes. This only works on the leader.
echo "dump" | nc localhost 2181



# envi
# Print details about serving environment
echo "envi" | nc localhost 2181


# ruok
# Tests if server is running in a non-error state. The server will respond with imok if it is running. Otherwise it will not respond at all.
echo "ruok" | nc localhost 2181


# srvr
# New in 3.3.0: Lists full details for the server.
echo "srvr" | nc localhost 2181

# stat
# Lists brief details for the server and connected clients.
echo "stat" | nc localhost 2181

# wchs
# New in 3.3.0: Lists brief information on watches for the server.
echo "wchs" | nc localhost 2181

#wchc
#New in 3.3.0: Lists detailed information on watches for the server, by session. This outputs a list of sessions(connections) with associated watches (paths). Note, depending on the number of watches this operation may be expensive (ie impact server performance), use it carefully.
echo "wchc" | nc localhost 2181

# wchp
# New in 3.3.0: Lists detailed information on watches for the server, by path. This outputs a list of paths (znodes) with associated sessions. Note, depending on the number of watches this operation may be expensive (ie impact server performance), use it carefully.
echo "wchp" | nc localhost 2181

# mntr
# New in 3.4.0: Outputs a list of variables that could be used for monitoring the health of the cluster.
echo "mntr" | nc localhost 2181