当其中一个代理关闭时,Kafka Consumer无法接收数据

时间:2018-12-13 23:45:59

标签: apache-kafka

Kafka Quickstart
在RHEL v6.9上使用Kafka v2.1.0

其中一个Kafka代理关闭时,消费者无法接收数据。

执行的步骤:
    1.启动Zookeeper
    2.启动Kafka-Server0(localhost:9092,kafkalogs1)
    3.启动Kafka-Server1(localhost:9094,kafkalog2)
    4.创建主题“ test1”,分区数= 1,复制因子= 2
    5.运行主题“ test1”的生产者
    6.运行消费者
    7.发送来自生产者的消息
    8.在用户方接收消息。

以上所有步骤均正常进行。

当我关闭Kafka-Server0时,使用者停止从Producer获取数据。 当我恢复Kafka-Server0时,使用者开始从中断的地方获取消息。

这些是使用的命令

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test1
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 1 --topic test1

当我使用--bootstrap-server选项中指定的两台服务器运行使用者时,行为是相同的(使用者端未收到任何消息)。

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092,localhost:9094 --topic test1

有什么主意,即使主题test1的复制因子设置为2,为什么当server0关闭时使用者仍然无法收到消息?

已经有一个类似的问题,但是没有完全回答 Kafka 0.10 quickstart: consumer fails when "primary" broker is brought down

2 个答案:

答案 0 :(得分:2)

在初始版本的Kafka中,偏移量是由zookeeper管理的,但是随着时间的推移,Kafka不断发展,引入了许多新功能。现在,Kafka在主题__consumer_offsets中管理偏移量。

您可以想到一个场景,其中创建了一个复制因子为1的主题。如果代理发生故障,则数据仅位于该故障的Kafka节点上。因此您无法获得此数据。类似的情况适用于__consumer_offsets主题。

您需要重新访问server.properties才能获得所需的功能。但是,如果您仍然想使用副本分区中的消息,则可能需要使用--from-beginning true

重新启动控制台使用者。

答案 1 :(得分:1)

如果offsets主题不可用,则无法使用。

查看这些文件的@Rule @JvmField var navigationActivityTestRule = ActivityTestRule(NavigationActivity::class.java, true, true) @MockK private lateinit var repo: Repo @Before fun setUp() { MockKAnnotations.init(this) TestInjector(TestAppModule(repo)).inject() } ,并查看上面的注释,并相应地增加(仅在主题不存在的情况下适用)

server.properties

根据your previous question,看起来它只有一个副本

了解如何increase replication factor来查找现有主题