知识点

相关文章

更多

最近更新

更多

KafKa 关键技术点

2019-03-06 16:02|来源: 网路

1、zero-copy

在Kafka上,有两个原因可能导致低效:1)太多的网络请求 2)过多的字节拷贝。

为了提高效率,Kafka把message分成一组一组的,每次请求会把一组message发给相应的consumer。

此外, 为了减少字节拷贝,采用了sendfile系统调用。为了理解sendfile原理,先说一下传统的利用socket发送文件要进行拷贝:


Sendfile系统调用:



2、Exactly once message transfer

怎样记录每个consumer处理的信息的状态?在Kafka中仅保存了每个consumer已经处理数据的offset。

这样有两个好处:1)保存的数据量少 2)当consumer出错时,重新启动consumer处理数据时,只需从最近的offset开始处理数据即可。


3、Push/pull

作为一个消息系统,Kafka遵循了传统的方式,选择由Producerbroker push消息并由Consumerbroker pull消息。

一些logging-centric system,比如FacebookScribeClouderaFlume,采用push模式。事实上,push模式和pull模式各有优劣。

push模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。push模式的目标是尽可能以最快速度传递消息,但是这样很容易造成Consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据Consumer的消费能力以适当的速率消费消息。

对于Kafka而言,pull模式更合适。pull模式可简化broker的设计,Consumer可自主控制消费消息的速率,同时Consumer可以自己控制消费方式——即可批量消费也可逐条消费,同时还能选择不同的提交方式从而实现不同的传输语义。


4、负载均衡和容错

Producer和broker之间没有负载均衡机制。

broker和consumer之间利用zookeeper进行负载均衡。所有broker和consumer都会在zookeeper中进行注册,且zookeeper会保存他们的一些元数据信息。如果某个broker和consumer发生了变化,所有其他的broker和consumer都会得到通知。


转自:http://dongxicheng.org/search-engine/kafka/

相关问答

更多
  • 多媒体计算机是能够同时抓取、处理、编辑、存储和展示两种以上不同类型信息媒体的计算机。 (1)多媒体计算机应做到能处理多种媒体,包括静态媒体和时变媒体。其中静态媒体指文字、图形、图像;时变媒体指声音、动画、活动影像。在处理的媒体中至少有一种是时变媒体。 (2)处理的过程具有交互性。系统应是能够接受外部信息并由操作者进行控制的一个实时过程。 (3)对各媒体进行综合处理。各种媒体在系统中能够得到同步的处理。 概括起来,多媒体计算机就是能够综合处理多种媒体信息,如文本、图形、图像和声音,使多种信息建立连接,并集成为 ...
  • 当您运行> bin/kafka-console-consumer.sh命令时,kafka加载一个ConsoleConsumer ,它将尝试使用自动生成的消费者标识创建消费者。 Kafka生成消费者ID的方式是将本地主机的名称连接到它。 所以,在这个问题上,事实上,Java无法解决我正在使用的Open Stack VM上本地主机的IP地址。 所以答案是Open Stack VM将本地主机名解析为kafka ,这是VM的名称。 我把卡夫卡和Zookeeper实例中的所有设置都设置为kafka1 。 所以,当ja ...
  • 假设 这是一个生产群集,您不希望任何数据丢失。 您有遍布代理的分区副本 对于每个分区,每个代理至少有一个副本 每个经纪人都可以访问所有zks 我就是这样做的 取消个别经纪人。 当其中一个代理关闭时,然后describe主题以检查是否只有未显示的副本属于被删除的代理。 重新启动代理并再次验证所有分区是否同步,然后再转到下一个代理。 然后单独停止启动每个zk,每次跟踪所有副本和分区是否同步。 这样,至少有一个zk可用于2个代理来维护其元数据 Assumptions This is a production cl ...
  • 之前您使用的是Kafka控制台生产商和消费者。 您在问题中提到的连接器是Kafka connect的一部分(您可以在此处阅读更多相关信息)。 要使用源和接收器连接器,您必须配置并启动连接工作器。 我认为你试图以独立模式运行整个过程。 快速入门页面包含解释这些连接器用法的步骤。 我希望它有所帮助。 Earlier you were using Kafka console producer and consumer. Whereas the connectors you have mentioned in yo ...
  • 您可以使用mirrormaker 0.8将数据带入1.0群集,然后使用1.0版本和群集内镜像通过kafka流应用程序或镜像消息处理程序进行转换。 这是一个示例消息处理程序。 https://github.com/gwenshap/kafka-examples/blob/master/MirrorMakerHandler/src/main/java/com/shapira/examples/TopicSwitchingHandler.java 无论哪种方式,如果你想在消息中使用时间戳,你必须先将它带到1.0簇 ...
  • 常见问题解答: https : //docs.confluent.io/current/streams/faq.html#accessing-record-metadata-such-as-topic-partition-and-offset-information 记录元数据可通过Processor API访问。 由于其处理器API集成,它也可以通过DSL间接访问。 使用Processor API,您可以通过ProcessorContext访问记录元数据。 例如,您可以在Processor#init()期 ...
  • 如果您可以选择使用能够直接写入Kafka的服务器(或者将生产者与您的应用程序代码集成)并且没有任何其他缺点,我肯定会这样做以避免整个日志文件解析步骤。 在这种情况下,您可以将任何分析解决方案作为Kafka消费者连接到下游,并可以将数据流入其中。 如果您决定首先在Web应用服务器上触摸磁盘,那么有很多解析和转发到Kafka的解决方案; Flume / Flafka,Logstash,KafkaCat等。查看Kafka生态系统页面 。 其中一些选项使您可以在数据到达Kafka代理之前转换数据,这在某些情况下可能 ...
  • 卡夫卡本身没有限制。 当数据从生成器进入时,它将以文件段的形式写入磁盘,这些段根据配置根据时间( log.roll.hours )或大小( log.segment.bytes )进行轮换 。 根据可以关闭的保留配置( log.cleanup.policy,log.retention.minutes,log.retention.bytes )删除较旧的段。 但请注意,代理将保持每个段文件都处于打开状态,因此请确保相应地设置了文件描述符限制。 代理配置文档: http : //kafka.apache.org/ ...
  • 是的你可以。 在Kafka中配置SSL时,仅适用于Kafka客户端到Kafka服务器以及可选地在Kafka服务器之间。 实际上,Zookeeper 3.4还不支持客户端和服务器之间的TLS通信。 Thay功能将在Zookeeper 3.5中出现。 Yes, you can. When you configure SSL in Kafka that is only for Kafka clients to Kafka servers and optionally between Kafka servers. ...