tjtjtjのメモ

自分のためのメモです

Docker outside of Docker

コンテナからコンテナを操作するその2

コンテナ側からホストのdocker.sock (/var/run/docker.sock)をマウントすることでコンテナ上のDockerコマンドはホスト側のDocker環境で実行される。 https://blog.nijohando.jp/post/docker-in-docker-docker-outside-of-docker/

dood

docker.sock をマウントした docker コンテナをrun してshellに接続

$ docker run -it -v /var/run/docker.sock:/var/run/docker.sock --name some-docker -d docker:stable-dind sh
$ docker exec -it some-docker sh

シェルで docker run とかいろいろ試す。ホスト側でいろいろ試した痕跡が見えた。

/ # docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES
a5afae659859        docker:stable-dind   "dockerd-entrypoint.…"   19 seconds ago      Up 19 seconds       2375-2376/tcp       some-docker

/ # docker run hello-world

Hello from Docker!

/ # docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                      PORTS               NAMES
1a6ced6e0f86        hello-world          "/hello"                 11 seconds ago      Exited (0) 10 seconds ago                       romantic_curie
a5afae659859        docker:stable-dind   "dockerd-entrypoint.…"   54 seconds ago      Up 53 seconds               2375-2376/tcp       some-docker
b87a1ce1b0eb        docker:stable-dind   "dockerd-entrypoint.…"   4 minutes ago       Exited (1) 4 minutes ago                        zealous_engelbart
aa633f1665b0        docker:stable-dind   "dockerd-entrypoint.…"   4 minutes ago       Exited (1) 4 minutes ago                        gifted_sinoussi
5df11e442065        docker:stable-dind   "dockerd-entrypoint.…"   5 minutes ago       Exited (1) 4 minutes ago                        dazzling_sinoussi
edb9406c5701        docker:stable-dind   "dockerd-entrypoint.…"   6 minutes ago       Exited (1) 6 minutes ago                        peaceful_banzai
5a951b9b9229        hello-world          "/hello"                 9 minutes ago       Exited (0) 9 minutes ago                        elegant_mclaren
142f3fb5d0bb        hello-world          "/hello"                 9 minutes ago       Exited (0) 9 minutes ago                        gifted_mayer
96114c99440c        hello-world          "/hello"                 11 minutes ago      Exited (0) 11 minutes ago                       xenodochial_archimedes
7563b251264c        hello-world          "/hello"                 12 minutes ago      Exited (0) 12 minutes ago                       vibrant_snyder

Docker in Docker

ちょっと試した。

What is Docker in Docker?

hub.docker.com

Docker内でDockerを実行することは一般的に推奨されませんが、Docker自体の開発など、正当な使用例がいくつかあります。

dind

dind のイメージをrun。privileged は特権モード

$ docker run -it --privileged --name some-docker -d docker:stable-dind

dind のシェルに接続。

$ docker exec -it some-docker sh

dind のシェルに接続。dind内で docker run とかいろいろ試す。

/ # docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

/ # docker run hello-world
:
Hello from Docker!
:

/ # docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        11 months ago       1.84kB

/ # docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
474e499442ad        hello-world         "/hello"            7 minutes ago       Exited (0) 7 minutes ago                       beautiful_perlman
4c897acfba25        hello-world         "/hello"            9 minutes ago       Exited (0) 9 minutes ago                       inspiring_saha

ホスト側からdind内は見えない。

$ docker ps -al
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES
a651d64cd588        docker:stable-dind   "dockerd-entrypoint.…"   21 minutes ago      Up 21 minutes       2375-2376/tcp       some-docker

kafka isr, acks を確認

min.insync.replicas=1

トピック作成とトピック確認

bin/kafka-topics.sh --zookeeper 192.168.0.21:2181 \
    --create --topic topic1 \
    --replication-factor 2 --partitions 3 --config min.insync.replicas=1
↓↓↓
Created topic topic1.

bin/kafka-topics.sh --describe --zookeeper 192.168.0.21:2181 --topic topic1
↓↓↓
Topic:topic1    PartitionCount:3        ReplicationFactor:2     Configs:min.insync.replicas=1
        Topic: topic1   Partition: 0    Leader: 2       Replicas: 2,1   Isr: 2,1
        Topic: topic1   Partition: 1    Leader: 3       Replicas: 3,2   Isr: 3,2
        Topic: topic1   Partition: 2    Leader: 1       Replicas: 1,3   Isr: 1,3

プロデュース acks:-1

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic1 \
  --request-required-acks -1
↓↓↓
>a
>b
>c

プロデュース acks:0

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic1 \
  --request-required-acks 0
>d
>e
>f

プロデュース acks:1

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic1 \
  --request-required-acks 1
>g
>h
>i

broker2 停止してトピック確認

bin/kafka-topics.sh --describe --zookeeper 192.168.0.21:2181 --topic topic1
↓↓↓
Topic:topic1    PartitionCount:3        ReplicationFactor:2     Configs:min.insync.replicas=1
        Topic: topic1   Partition: 0    Leader: 1       Replicas: 2,1   Isr: 1
        Topic: topic1   Partition: 1    Leader: 3       Replicas: 3,2   Isr: 3
        Topic: topic1   Partition: 2    Leader: 1       Replicas: 1,3   Isr: 1,3

プロデュース acks:-1

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic1 \
  --request-required-acks -1
↓↓↓
>A
>B
>C

プロデュース acks:0

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic1 \
  --request-required-acks 0
↓↓↓
>D
>E
>F

プロデュース acks:1

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic1 \
  --request-required-acks 1
↓↓↓
>G
>H
>I

コンシューム

bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic topic1 --from-beginning
↓↓↓
a
d
h
C
F
G
b
e
i
A
D
H
c
f
g
B
E
I
^CProcessed a total of 18 messages

min.insync.replicas=2

トピック作成とトピック確認

bin/kafka-topics.sh --zookeeper 192.168.0.21:2181 \
    --create --topic topic2 \
    --replication-factor 2 --partitions 3 --config min.insync.replicas=2
↓↓↓
Created topic topic2.


bin/kafka-topics.sh --describe --zookeeper 192.168.0.21:2181 --topic topic2
↓↓↓
Topic:topic2    PartitionCount:3        ReplicationFactor:2     Configs:min.insync.replicas=2
        Topic: topic2   Partition: 0    Leader: 2       Replicas: 2,3   Isr: 2,3
        Topic: topic2   Partition: 1    Leader: 3       Replicas: 3,1   Isr: 3,1
        Topic: topic2   Partition: 2    Leader: 1       Replicas: 1,2   Isr: 1,2

プロデュース acks:-1

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic2 \
  --request-required-acks -1
↓↓↓
>a
>b
>c

プロデュース acks:0

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic2 \
  --request-required-acks 0
↓↓↓
>d
>e
>f

プロデュース acks:1

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic2 \
  --request-required-acks 1
↓↓↓
>g
>h
>i

broker2 停止してトピック確認。partition:0,2 は isr が1コしかない。acks:-1のとき2/3で失敗するはず。

bin/kafka-topics.sh --describe --zookeeper 192.168.0.21:2181 --topic topic2
↓↓↓
opic:topic2    PartitionCount:3        ReplicationFactor:2     Configs:min.insync.replicas=2
        Topic: topic2   Partition: 0    Leader: 3       Replicas: 2,3   Isr: 3
        Topic: topic2   Partition: 1    Leader: 3       Replicas: 3,1   Isr: 3,1
        Topic: topic2   Partition: 2    Leader: 1       Replicas: 1,2   Isr: 1

プロデュース acks:-1。予想通り A,C の送信に失敗。

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic2 \
  --request-required-acks -1
↓↓↓
>A
>[2019-12-10...] WARN [Producer clientId=console-producer] Got error produce response with correlation id 5 on topic-partition topic2-2, retrying (2 attempts left). Error: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender)
[2019-12-10...] WARN [Producer clientId=console-producer] Got error produce response with correlation id 6 on topic-partition topic2-2, retrying (1 attempts left). Error: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender)
[2019-12-10...] WARN [Producer clientId=console-producer] Got error produce response with correlation id 7 on topic-partition topic2-2, retrying (0 attempts left). Error: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender)
[2019-12-10...] ERROR Error when sending message to topic topic2 with key: null, value: 1 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.NotEnoughReplicasException: Messages are rejected since there are fewer in-sync replicas than required.
B
>C
>[2019-12-10...] WARN [Producer clientId=console-producer] Got error produce response with correlation id 10 on topic-partition topic2-0, retrying (2 attempts left). Error: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender)
[2019-12-10...] WARN [Producer clientId=console-producer] Got error produce response with correlation id 11 on topic-partition topic2-0, retrying (1 attempts left). Error: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender)
[2019-12-10...] WARN [Producer clientId=console-producer] Got error produce response with correlation id 12 on topic-partition topic2-0, retrying (0 attempts left). Error: NOT_ENOUGH_REPLICAS (org.apache.kafka.clients.producer.internals.Sender)
[2019-12-10...] ERROR Error when sending message to topic topic2 with key: null, value: 1 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.NotEnoughReplicasException: Messages are rejected since there are fewer in-sync replicas than required.
^C

プロデュース acks:0

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic2 \
  --request-required-acks 0
↓↓↓
>D
>E
>F

プロデュース acks:1

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 \
  --topic topic2 \
  --request-required-acks 1
↓↓↓
>G
>H
>I

起動しておいたコンシューマ

bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic topic2 --from-beginning
a
b
c
d
e
f
g
h
i
[2019-12-10...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-71537] Connection to node 2 (/192.168.0.22:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
B
D
E
F
G
H
I
[2019-12-10...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-71537] Connection to node 2 (/192.168.0.22:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
^CProcessed a total of 16 messages

kafka コンシューマグループ

コンシューマグループを試した。

あるトピックに複数のコンシューマを接続すると、各コンシューマーが同じメッセージを受信する。 コンシューマグループを使うと同一グループのコンシューマは、同じメッセージを受信しない。同一グループのコンシューマは別パーティションを購読しようとするため。

トピックのパーティション確認

# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic partitioned-topic
Topic:partitioned-topic PartitionCount:3        ReplicationFactor:1     Configs:
        Topic: partitioned-topic        Partition: 0    Leader: 1       Replicas: 1     Isr: 1
        Topic: partitioned-topic        Partition: 1    Leader: 2       Replicas: 2     Isr: 2
        Topic: partitioned-topic        Partition: 2    Leader: 3       Replicas: 3     Isr: 3

コンシューマ1コ目

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --group g1

コンシューマグループ確認。89a2a がパーティション0,1,2 を購読している。

# bin/kafka-consumer-groups.sh --bootstrap-server 192.168.0.21:9092 --group g1 --describe

TOPIC             PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                     HOST            CLIENT-ID
partitioned-topic 0          17              17              0               consumer-1-89a2acb0-b36c-4e92-87b3-abc2a0d27ebe /192.168.0.21   consumer-1
partitioned-topic 1          14              14              0               consumer-1-89a2acb0-b36c-4e92-87b3-abc2a0d27ebe /192.168.0.21   consumer-1
partitioned-topic 2          19              19              0               consumer-1-89a2acb0-b36c-4e92-87b3-abc2a0d27ebe /192.168.0.21   consumer-1

コンシューマ2コ目

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.22:9092 --topic partitioned-topic --group g1

コンシューマグループ確認。89a2a がパーティション0,1、ecadがパーティション2を購読している。

# bin/kafka-consumer-groups.sh --bootstrap-server 192.168.0.21:9092 --group g1 --describe

TOPIC             PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                     HOST            CLIENT-ID
partitioned-topic 0          17              17              0               consumer-1-89a2acb0-b36c-4e92-87b3-abc2a0d27ebe /192.168.0.21   consumer-1
partitioned-topic 1          14              14              0               consumer-1-89a2acb0-b36c-4e92-87b3-abc2a0d27ebe /192.168.0.21   consumer-1
partitioned-topic 2          19              19              0               consumer-1-ecad08be-1624-4a48-be03-980b3d5b8ee0 /192.168.0.21   consumer-1

メッセージ送信

この状態で6コのメッセージ送信する。メッセージがラウンドロビンパーティション配送されるなら 89a2が4つ、ecadが2つ受信するだろう。

# bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 --topic partitioned-topic
>a
>b
>c
>d
>e
>f

コンシューマ1

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --group g1
b
c
e
f

コンシューマ2。想定通りの結果

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.22:9092 --topic partitioned-topic --group g1
a
d

パーティション毎のメッセージ確認

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 0
b
e
^CProcessed a total of 2 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 1
c
f
^CProcessed a total of 2 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 2
a
d
^CProcessed a total of 2 messages

kafka メッセージの削除

kafka を実験しているとトピックを削除するのでなくメッセージをお掃除したいときがある。kafka-delete-records.shでできるようだ。

削除前の確認

パーティション毎のメッセージ確認

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 0
b
e
^CProcessed a total of 2 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 1
c
f
^CProcessed a total of 2 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 2
a
d
^CProcessed a total of 2 messages

削除

offsetfile.json を作成。削除というか -1 でoffsetを最後まで進めている。

{"partitions":[{"topic":"partitioned-topic","partition":0,"offset": -1}],"version":1}
# bin/kafka-delete-records.sh --bootstrap-server 192.168.0.21:9092 --offset-json-file offsetfile.json
Executing records delete operation
Records delete operation completed:
partition: partitioned-topic-0  low_watermark: 15

削除後の確認

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 0
^CProcessed a total of 0 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 1
c
f
^CProcessed a total of 2 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 2
a
d
^CProcessed a total of 2 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning
a
d
c
f
^CProcessed a total of 4 messages

参考

stackoverflow.com

kafka レプリケーションパーティションを試す その2

パーティションするがレプリケーションしない場合を試した。

トピック作成

# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic partitioned-topic
Created topic partitioned-topic.
# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic partitioned-topic
Topic:partitioned-topic PartitionCount:3        ReplicationFactor:1     Configs:
        Topic: partitioned-topic        Partition: 0    Leader: 1       Replicas: 1     Isr: 1
        Topic: partitioned-topic        Partition: 1    Leader: 2       Replicas: 2     Isr: 2
        Topic: partitioned-topic        Partition: 2    Leader: 3       Replicas: 3     Isr: 3

プロデューサー

# bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 --topic partitioned-topic
>a
>b
>c
>d
>e
>f
>g
>h
>i
>j

コンシューマー

broker1 指定。broker 指定してもそのbrokerから取得するわけじゃないのは分かっているが一応。

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning
b
e
h
a
d
g
j
c
f
i
^CProcessed a total of 10 messages

broker2 指定。

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.22:9092 --topic partitioned-topic --from-beginning
a
d
g
j
b
e
h
c
f
i
^CProcessed a total of 10 messages

broker3 指定

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.23:9092 --topic partitioned-topic --from-beginning
a
d
g
j
b
e
h
c
f
i
^CProcessed a total of 10 messages

パーティション指定

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 0
c
f
i
^CProcessed a total of 3 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 1
a
d
g
j
^CProcessed a total of 4 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 2
b
e
h
^CProcessed a total of 3 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 3
^CProcessed a total of 0 messages

broker2 をdownしたらどうなる?

トピック確認。partition:1 の leader:-1 になっている。

# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic partitioned-topic
Topic:partitioned-topic PartitionCount:3        ReplicationFactor:1     Configs:
        Topic: partitioned-topic        Partition: 0    Leader: 1       Replicas: 1     Isr: 1
        Topic: partitioned-topic        Partition: 1    Leader: -1      Replicas: 2     Isr: 2
        Topic: partitioned-topic        Partition: 2    Leader: 3       Replicas: 3     Isr: 3

コンシューマー。warningしつつ、partition:0,2 分を取得した。

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning
[2019-12-04 ...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-16999] 1 partitions have leader brokers without a matching listener, including [partitioned-topic-1] (org.apache.kafka.clients.NetworkClient)
b
e
h
c
f
i
[2019-12-04 ...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-16999] 1 partitions have leader brokers without a matching listener, including [partitioned-topic-1] (org.apache.kafka.clients.NetworkClient)
^CProcessed a total of 6 messages

プロデューサー。warningしつつ動いた。

bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 --topic partitioned-topic

aa [2019-12-04 ...] WARN [Producer clientId=console-producer] 1 partitions have leader brokers without a matching listener, including [partitioned-topic-1] (org.apache.kafka.clients.NetworkClient) bb cc dd ee ff gg

つづけてコンシューマー。受信できない

bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning

bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.23:9092 --topic partitioned-topic --from-beginning

[2019-12-04 ...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-49753] 1 partitions have leader brokers without a matching listener, including [partitioned-topic-1] (org.apache.kafka.clients.NetworkClient) [2019-12-04 ...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-49753] 1 partitions have leader brokers without a matching listener, including [partitioned-topic-1] (org.apache.kafka.clients.NetworkClient) [2019-12-04 ...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-49753] 1 partitions have leader brokers without a matching listener, including [partitioned-topic-1] (org.apache.kafka.clients.NetworkClient) [2019-12-04 ...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-49753] 1 partitions have leader brokers without a matching listener, including [partitioned-topic-1] (org.apache.kafka.clients.NetworkClient) [2019-12-04 ...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-49753] 1 partitions have leader brokers without a matching listener, including [partitioned-topic-1] (org.apache.kafka.clients.NetworkClient) [2019-12-04 ...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-49753] 1 partitions have leader brokers without a matching listener, including [partitioned-topic-1] (org.apache.kafka.clients.NetworkClient) [2019-12-04 ...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-49753] 1 partitions have leader brokers without a matching listener, including [partitioned-topic-1] (org.apache.kafka.clients.NetworkClient) [2019-12-04 ...] WARN [Consumer clientId=consumer-1, groupId=console-consumer-49753] 1 partitions have leader brokers without a matching listener, including [partitioned-topic-1] (org.apache.kafka.clients.NetworkClient) ^CProcessed a total of 0 messages

■ broker2 をupしたらどうなる?

欠損はなかった

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic partitioned-topic

Topic:partitioned-topic PartitionCount:3 ReplicationFactor:1 Configs: Topic: partitioned-topic Partition: 0 Leader: 1 Replicas: 1 Isr: 1 Topic: partitioned-topic Partition: 1 Leader: 2 Replicas: 2 Isr: 2 Topic: partitioned-topic Partition: 2 Leader: 3 Replicas: 3 Isr: 3

bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning

b e h aa cc ee gg c f i bb dd ff a d g j ^CProcessed a total of 17 messages

パーティション指定し確認。broker2 を避けて保存していたようだ。

bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 0

c f i bb dd ff ^CProcessed a total of 6 messages

bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 1

a d g j ^CProcessed a total of 4 messages

bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 2

b e h aa cc ee gg ^CProcessed a total of 7 messages

bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic partitioned-topic --from-beginning --partition 3

^CProcessed a total of 0 messages

kafka レプリケーションパーティションを試す その1

中途半端

トピック作成

# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 3 --topic replicated-topic
Created topic replicated-topic.

トピック確認

list をみる

# bin/kafka-topics.sh --list --zookeeper localhost:2181
replicated-topic

describe を見る。 Partition:0 は リーダーが1。1,2でレプリケーションしている。1,2 とも ISR(In Sync Replica レプリカ済み) 。

# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic replicated-topic
Topic:replicated-topic  PartitionCount:3        ReplicationFactor:2     Configs:
        Topic: replicated-topic Partition: 0    Leader: 1       Replicas: 1,2   Isr: 1,2
        Topic: replicated-topic Partition: 1    Leader: 2       Replicas: 2,3   Isr: 2,3
        Topic: replicated-topic Partition: 2    Leader: 3       Replicas: 3,1   Isr: 3,1

ブローカー1コ指定で登録/受信

broker1 へメッセージ登録しブローカ1,2,3で受信してみる。順番が異なる場合があるが、全部受信した。

# bin/kafka-console-producer.sh --broker-list 192.168.0.21:9092 --topic replicated-topic
>qwer
>asdf
>zxcv
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic replicated-topic --from-beginning
asdf
zxcv
qwer
^CProcessed a total of 3 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.22:9092 --topic replicated-topic --from-beginning
qwer
asdf
zxcv
^CProcessed a total of 3 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.23:9092 --topic replicated-topic --from-beginning
qwer
asdf
zxcv
^CProcessed a total of 3 messages

brokerをつなげてコンシューム。

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092,192.168.0.22:9092,192.168.0.23:9092 --topic replicated-topic --from-beginning
asdf
zxcv
qwer
^CProcessed a total of 3 messages

パーティションを指定してconsume

3メッセージが別パーティションに配置されていたことがわかる。

↓下だと思っていたが、誤りだった。

broker1に登録したメッセージは1,2でレプリケーションする。3からはコンシュームできない。

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic replicated-topic --partition 0 --from-beginning
zxcv
^CProcessed a total of 1 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic replicated-topic --partition 1 --from-beginning
qwer
^CProcessed a total of 1 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic replicated-topic --partition 2 --from-beginning
asdf
^CProcessed a total of 1 messages

存在しないパーティションの場合

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.21:9092 --topic replicated-topic --partition 3 --from-beginning
^CProcessed a total of 0 messages

broker2 からコンシューム。broker1と同じ結果が得られた。

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.22:9092 --topic replicated-topic --partition 0 --from-beginning
zxcv
^CProcessed a total of 1 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.22:9092 --topic replicated-topic --partition 1 --from-beginning
qwer
^CProcessed a total of 1 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.22:9092 --topic replicated-topic --partition 2 --from-beginning
asdf
^CProcessed a total of 1 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.22:9092 --topic replicated-topic --partition 3 --from-beginning
^CProcessed a total of 0 messages

broker3 からコンシューム。これも同じ

# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.23:9092 --topic replicated-topic --partition 0 --from-beginning
zxcv
^CProcessed a total of 1 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.23:9092 --topic replicated-topic --partition 1 --from-beginning
qwer
^CProcessed a total of 1 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.23:9092 --topic replicated-topic --partition 2 --from-beginning
asdf
^CProcessed a total of 1 messages
# bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.23:9092 --topic replicated-topic --partition 3 --from-beginning
^CProcessed a total of 0 messages

どのブローカーを指定しても、メッセージのパーティションのリーダーを見つけ、リーダーに書き込み/読み出する挙動のなのか。書籍等をあたりたい。