我在Ubuntu上使用Apache Kafka代理,它作为Linux系统服务与Zookeeper Linux服务一起运行。我知道如何使用独立的Kafka代理,它对我们的应用程序非常有效,但我缺乏Kafka集群的经验和知识。
不幸的是,我们今年第二次经历了服务器关闭,它影响了集群,因此集群ID被更改,Kafka Service无法重新启动。当在www.example.com文件中更改集群ID不meta.properties起作用时,我在StackOverflow中寻找解决方案,我发现的是删除logs目录。然而,正如我之前提到的,这是第二次发生关机,在删除这样的目录并重新创建它之后,我的Kafka安装目录有两个不同的日志目录。它们被命名为“logs-1”和“logs”,因为Kafka试图创建/logs/logs.log文件,所以很自然地,每个文件都包含不同的数据(主题和配置)。
问题-有没有一种方法可以同步2个目录,这样旧的数据就不会丢失?也许使用ZooKeeper?
1条答案
按热度按时间lymgl2op1#
Kafka会自动复制数据,前提是您已经正确配置了它。您不能跨代理同步目录,因为每个代理不需要共享相等的分区。这就是数据在集群中的分布方式。
Zookeeper不同步Linux操作系统文件系统,Kafka的下一个主要版本将完全删除对它的依赖,所以我不会花时间调查。
log.dirs
不是自动创建的。管理员应该为每一个都准备必要的操作系统权限和/或卷挂载。(对于Kafka,请使用外部磁盘,不要共享操作系统卷,尤其是不要与/var/log共享卷.“logs-1”目录只是“logs”Kafka主题的分区1。这些目录存储Kafka log * 段和indexes *。如果/当您删除这些时,您将导致数据丢失.
拥有3个(或更多)代理,每个代理的主题都有
replication.factor=3
和min.insync.replicas=2
,这是为了容错。这样,您可以为一个主题丢失任何一个代理,而客户端继续工作而不会丢失数据。如果少于这个值,您将丢失数据,并在日志上运行
rm -rf
。