情景
我已经在一台机器上运行的容器集群中启动了多代理配置的所有组件。我使用了在中找到的shell脚本https://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz
使用zookeeper属性启动zookeeper
启动了3个具有3个不同服务器属性的代理。它们仅根据这些配置值进行区分
broker.id
log.dirs
port
我也试着改变 offsets.topic.replication.factor
以及 transaction.state.log.replication.factor
,但我不认为它们是相关的。
注意:我启动代理的顺序是0,1,2
创建一个具有复制因子3和一个分区的主题
bin/kafka-topics.sh --create --topic repl_topic --zookeeper localhost:2181 --replication-factor 3 --partitions 1
启动控制台生产者和消费者
bin/kafka-console-producer.sh --topic repl_topic --broker-list localhost:9092,localhost:9093,localhost:9094
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092,localhost:9093,localhost:9094 -topic repl_topic --from-beginning
生产者和消费者似乎工作正常。但是,如果我通过ctrl-c关闭代理0(即使它不是leader),使用者将收到一个警告,但它不会再收到来自生产者的消息。只有当代理0再次启动时,使用者才会收到所有消息。
我的结论
使用者仅依赖于代理0。它不与其他人互动。
我的问题
为什么?
1条答案
按热度按时间mbjcgjjk1#
我终于解决了这个问题,我把它修好了。检查消费偏移量时,我注意到它没有被复制。
事实上,我第一次使用consumer是针对一个复制系数等于1的主题。在此期间,使用者只创建了一个副本。该主题不再更新,然后其他代理无法看到它,如果代理0正在下降。
解决方案
可以通过命令为每个分区建立一个新的复制级别
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file new_reassignment.json --execute
这里使用的新的_reassignment.json文件包含以下内容在这一点上,成功地管理任何经纪人的失败都是可能的。
__消费者补偿——额外信息
此特定主题中的分区数默认设置为50。消费者触发它的创造。主题主要由使用者用于提交每个用户收到的消息topic:partion. 如果此消费者补偿主题对其他代理不可见,则代理将无法通知消费者使用新消息。