Eu criei um docker-compose
onde subo os serviços do zookeeper e do kafka
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.3.5
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- "2181:2181"
volumes:
- ./data/zookeeper/data:/var/lib/zookeeper/data
- ./data/zookeeper/log:/var/lib/zookeeper/log
kafka-1:
image: confluentinc/cp-kafka:7.3.5
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka-1
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:29092,PLAINTEXT_HOST://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
volumes:
- ./data/kafka:/etc/kafka
- ./data/kafka/data:/var/lib/kafka/data/
kafka-2:
image: confluentinc/cp-kafka:7.3.5
depends_on:
- zookeeper
ports:
- "9093:9093"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka-2
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:29093,PLAINTEXT_HOST://localhost:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
volumes:
- ./data/kafka-2:/etc/kafka
- ./data/kafka-2/data:/var/lib/kafka/data/
No volume /data/kafka e /data/kafka-2 tenho os arquivos:
- kafka.properties
- log4j.properties
- server.properties
- tools-log4j.properties
No server properties fiz as alterações para ele criar 3 partições e realizar as replicações. Vou colocar só estes trechos por causa do tamanho do arquivo:
############################# Server Basics #############################
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=0
#Define replication of broken cluster
default.replication.factor=2
############################# Socket Server Settings #############################
# The default number of log partitions per topic. More partitions allow greater
# parallelism for consumption, but this will also result in more files across
# the brokers.
num.partitions=3
Após alterar o default.replication.factor=2
eu fiz um docker-compose down
e após criei novos containers com o docker-compose up
o estranho e que ao startar os serviços ele cria somente o tópico com uma partição.
docker exec -it ecommerce_kafka-2_1 /bin/kafka-topics --bootstrap-server localhost:9093 --describe
[2023-10-17 18:43:14,310] WARN [AdminClient clientId=adminclient-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
Topic: ECOMMERCE_NEW_ORDER TopicId: 6_JNVwwUR9WjRAx1jsqLPQ PartitionCount: 3 ReplicationFactor: 2 Configs:
Topic: ECOMMERCE_NEW_ORDER Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
Topic: ECOMMERCE_NEW_ORDER Partition: 1 Leader: 2 Replicas: 2,1 Isr: 2,1
Topic: ECOMMERCE_NEW_ORDER Partition: 2 Leader: 1 Replicas: 1,2 Isr: 1,2
Topic: ECOMMERCE_SEND_EMAIL TopicId: UqUdjybWQtKswZUyQEzU2A PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: ECOMMERCE_SEND_EMAIL Partition: 0 Leader: 1 Replicas: 1 Isr: 1
Topic: __consumer_offsets TopicId: U3ePD8FIRmKzAeiJ7pBBew PartitionCount: 50 ReplicationFactor: 1 Configs: compression.type=producer,cleanup.policy=compact,segment.bytes=104857600
Aqui o ECOMMERCE_NEW_ORDER aparece com as três partições porque eu criei elas via comando.
Listando diretório no container para verificar se os arquivos de configuração foram carregados.
Arquivo server.properties no container com a replication.factor
Alguém tem um dica/sugestão do que posso fazer para corrigir este problema?
Link do projeto em: https://github.com/estevamdf2/ecommerce/