类似Dynamo的数据库(例如Cassandra)可以通过仲裁来强制执行一致性,即一些同步写入的副本(W)和一些要读取的副本(R)应该以W + R> N的方式选择N是复制因子.另一方面,像Zookeeper这样的基于PAXOS的系统也被用作一致的容错存储.
这两种方法有什么区别?PAXOS是否提供W + R> N架构未提供的保证?
出于特殊原因,我需要同时使用 - ConsumerGroup(也称为高级消费者)和SimpleConsumer(也称为低级消费者)来阅读Kafka.因为ConsumerGroup我使用基于ZooKeeper的配置并且对它完全满意,但SimpleConsumer需要实例化种子代理.
我不想保留两者的列表 - ZooKeeper和代理主机.因此,我正在寻找一种从ZooKeeper 自动发现特定主题的代理的方法.
由于一些间接信息,我相信这些数据存储在ZooKeeper中的以下路径之一:
/brokers/topics/<topic>/partitions/<partition-id>/state 但是,当我尝试从这些节点读取数据时,我收到序列化错误(我正在使用com.101tec.zkclient此代码):
org.I0Itec.zkclient.exception.ZkMarshallingError:java.io.StreamCorruptedException:无效的流标题:位于org.I0Itec.zkclient.ZkClient.derializable的org.I0Itec.zkclient.serialize.SerializableSerializer.deserialize(SerializableSerializer.java:37)中的7B226A6D (zkClient.java:740)org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:773)org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:761)atg.I0Itec.zkclient.ZkClient. readData(ZkClient.java:750)at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:744)... 64 elided引起:java.io.StreamCorruptedException:无效的流标题:java.io.ObjectInputStream中的7B226A6D位于org.I0Itec.zkclient.serialize的org.I0Itec.zkclient.serialize.TcclAwareObjectIputStream.(TcclAwareObjectIputStream.java :)的java.io.ObjectInputStream.(ObjectInputStream.java:299)中的.readStreamHeader(ObjectInputStream.java:804). SerializableSerializer.deserialize(SerializableSerializer.java:31)... 69更多
我可以毫无问题地编写和读取自定义Java对象(例如字符串),所以我认为这不是客户端的问题,而是相当棘手的编码.因此,我想知道:
在我的zookeeper/conf/log4j.properties文件中,我将zookeeper.log.dir设置为$ HOME/zklogs
当我使用zkServer.sh时,它不使用该目录.相反,它使用$ {ZOO_LOG_DIR},当我回应它时,出现"."
我不明白如何解决这个问题,我没有看到$ {ZOO_LOG_DIR}设置在任何地方.我不确定它是如何设置为"." 一点都不 我也不知道如何在没有zkServer.sh的情况下启动zookeeper.我在linux上也很吵,在这个问题上有点迷失......
有没有人知道如何解决这个问题,以便它使用conf目录中我的log4j.properties文件中设置的目录?
***更新,我在我的zookeeper安装的bin目录中的zkEnv.sh中找到了.有代码:
if["x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="."
fi
Run Code Online (Sandbox Code Playgroud)
我不确定第一行发生了什么,但必须在这里出现问题.我希望它从我的log4j.properties文件中查看zookeeper.log.dir.任何人都可以告诉我这是否属实?我不想只是硬连接这里的道路......
我在Ubuntu服务器14.04上使用sudo apt-get install zookeeper安装了Zookeeper.我无法理解如何配置Zookeeper在启动时自动启动.此外,我只能使用root权限手动启动它.
我查看了官方页面中的文档,似乎解决方案是确保在启动时运行zkServer.sh或类似的东西.我一直在寻找如何在Ubuntu上启动时执行脚本,并找到了一些方法:使用Upstart,使用System V,Cron作业甚至找到一个Python实用程序,一个灵魂共享用于监视进程并在崩溃时重新启动它们.鉴于我是Linux编程的初学者,花了太多时间在Windows上工作(在这种情况下它很容易解决!),所有看起来都有点复杂,不确定哪一个是最好的?
任何帮助都感激不尽.谢谢.
我一直在使用Kafka 2.4.0 (2.11),昨天由于某种未知原因我不得不强行终止该进程。从那以后,由于以下错误,我一直无法启动 Zookeeper:
[2020-01-11 11:12:43,783] ERROR Unexpected exception, exiting abnormally (org.apache.zookeeper.server.ZooKeeperServerMain)
java.io.IOException: No snapshot found, but there are log entries. Something is broken!
at org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:222)
at org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:240)
at org.apache.zookeeper.server.ZooKeeperServer.loadData(ZooKeeperServer.java:290)
at org.apache.zookeeper.server.ZooKeeperServer.startdata(ZooKeeperServer.java:450)
at org.apache.zookeeper.server.NIOServerCnxnFactory.startup(NIOServerCnxnFactory.java:764)
at org.apache.zookeeper.server.ServerCnxnFactory.startup(ServerCnxnFactory.java:98)
at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:144)
at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106)
at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
Run Code Online (Sandbox Code Playgroud)
一旦我搜索了这个问题,我就发现了ZOOKEEPER-3513报告的问题,这可能会也可能不会解释问题。但是,我发现奇怪的是,如果我删除 Kafka/Zookeeper 目录并从头开始重新下载,问题仍然存在。有谁知道我该如何解决这个问题?
感谢您的帮助
我正在使用Kafka的高级消费者.因为我正在使用Kafka作为我的应用程序的"事务队列",所以我需要确保我不会错过或重读任何消息.我有两个问题:
如何将偏移量提交给zookeeper?在每次成功使用消息后,我将关闭自动提交和提交偏移量.我似乎无法找到如何使用高级消费者执行此操作的实际代码示例.谁能帮我这个?
另一方面,我听说承诺动物园管理员可能会很慢,所以另一种方式可能是在本地跟踪偏移?这种替代方法是否可取?如果是的话,你会怎么做?
message-queue distributed-transactions apache-kafka apache-zookeeper
使用Kafka和Zookeeper时,我对使用偏移量存储的位置感到困惑.在某些情况下,偏移似乎存储在Zookeeper中,在其他情况下,它们存储在Kafka中.
是什么决定了偏移量是存储在Kafka还是Zookeeper中?什么是利弊?
注意:当然我也可以在一些不同的数据存储中存储我自己的偏移量,但这不是这篇文章的图片的一部分.
有关我的设置的更多详情:
我正在与zookeeper(http://zookeeper.apache.org/)合作.下载3.3.5并创建zoo.cfg并放在$ ZOOKEEPER/conf中,启动zookeeper使用zkServer启动.但以下是错误
可以请任何帮助我..
nfig or no quorum defined in config, running in standalone mode
2012-08-01 23:20:32,175 [myid:] - ERROR [main:ZooKeeperServerMain@54] - Invalid
arguments, exiting abnormally
java.lang.NumberFormatException: For input string: "C:\Development\apps\zookeeper\zookeeper3.4.1\bin\..\conf\zoo.cfg"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)
at org.apache.zookeeper.server.ServerConfig.parse(ServerConfig.java:60)
at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:83)
at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:52)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:116)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
2012-08-01 23:20:32,177 [myid:] - INFO [main:ZooKeeperServerMain@55] - Usage: Z
ooKeeperServerMain configfile | port datadir [ticktime] [maxcnxns]
Usage: ZooKeeperServerMain configfile | port datadir [ticktime] [maxcnxns]
Run Code Online (Sandbox Code Playgroud) 我是动物园管理员港口的新手,我过去几天就遇到过这个港口.
我两次介绍了zookeeper port关键字:
然后,我遇到了Apache Zookeeper,(我猜这与分布式应用程序有关,我也是分布式应用程序的新手).因此问题在我脑海中浮现:
任何帮助将不胜感激,谢谢.
我将在我的应用程序中实现一组微服务的编排.两个广泛使用的工具我发现与Apache Zookeeper和Netflix Eureka相比.
任何人都可以根据基本差异给我一个比较,这两项服务有哪些?
还有其他强大的工具吗?
architecture orchestration microservices netflix-eureka apache-zookeeper