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
答案 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来查找现有主题