分布式消息系统:Kafka(八)一些问题

8、问题

8.1 Zookeeper的作用,没有Zookeeper的情况下使用Kafka?

  Zookeeper是一个开放源码、高性能的协调服务。一旦Zookeeper停止工作,它就不能服务客户端的请求。

  • Zookeeper主要用于在集群中不同节点之间进行通信
  • 在Kafka中,它被用于提交偏移量,因此如果节点在任何情况下都失败了,它都可以从之前提交的偏移量中获取
  • 除此之外,它还执行其他活动,如: leader检测、分布式同步、配置管理、识别新节点何时离开或连接、集群、节点实时状态等等。

8.2 在数据制作过程中,你如何能从Kafka得到准确的信息?

  在数据中,为了精确地获得Kafka的消息,你必须遵循两件事: 在数据消耗期间避免重复,在数据生产过程中避免重复

  这里有两种方法,可以在数据生成时准确地获得一个语义:

  • 每个分区使用一个单独的写入器,每当你发现一个网络错误,检查该分区中的最后一条消息,以查看您的最后一次写入是否成功
  • 在消息中包含一个主键(UUID或其他),并在用户中进行反复制

8.3 在kafka中为什么几乎不允许对消息进行“随机读写”

  原因:每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字。kafka并没有提供其他额外的索引机制来存储offset。

  kafka和JMS(Java Message Service)实现(activeMQ)不同的是:即使消息被消费,消息仍然不会被立即删除。日志文件将会根据broker中的配置要求,保留一定的时间之后删除;比如log文件保留2天,那么两天后,文件会被清除,无论其中的消息是否被消费.kafka通过这种简单的手段,来释放磁盘空间,以及减少消息消费之后对文件内容改动的磁盘IO开支.

  对于consumer而言,它需要保存消费消息的offset,对于offset的保存和使用,有consumer来控制;当consumer正常消费消息时,offset将会”线性”的向前驱动,即消息将依次顺序被消费.事实上consumer可以使用任意顺序消费消息,它只需要将offset重置为任意值。

  partitions的设计目的有多个.最根本原因是kafka基于文件存储.通过分区,可以将日志内容分散到多个server上,来避免文件尺寸达到单机磁盘的上限,每个partiton都会被当前server(kafka实例)保存;可以将一个topic切分多任意多个partitions,来消息保存/消费的效率.此外越多的partitions意味着可以容纳更多的consumer,有效提升并发消费的能力.

你可能感兴趣的:(kakfa,分布式系统)