如何用Kafka在生产者端有容错率?

问题描述 投票:1回答:1

我是Kafa和数据摄取的新手。我知道Kafka是容错的,因为它把数据冗余地保存在多个节点上。然而,我不明白的是,我们如何才能在sourceproducer端实现容错。例如,如果我把netcat作为souce,如下例所示。

nc -l [some_port] | ./bin/kafka-console-producer --broker-list [kafka_server]:9092 --topic [my_topic]

如果做netcat的节点宕机,生产者推送消息就会失败。我在想,是否有一种机制可以让Kafka自己拉动输入,比如说,如果在一个节点上netcat失败了,另一个节点就可以接手,开始使用netcat推送消息。

我的第二个问题是在Flume中如何实现,因为它是一个基于拉的架构。在这种情况下,也就是说,如果一个节点做netcat失败了,Flume还能用吗?

apache-kafka kafka-producer-api flume data-ingestion
1个回答
1
投票

每个 课题,是一个特定的数据流(类似于数据库中的表)。主题,分为 隔断 (你喜欢多少就有多少),其中一个分区内的每条消息都有一个递增的id,如下图所示,称为偏移量。

分区0。

+---+---+---+-----+
| 0 | 1 | 2 | ... |
+---+---+---+-----+

分区1

+---+---+---+---+----+
| 0 | 1 | 2 | 3 | .. |
+---+---+---+---+----+

现在一个Kafka集群是由多个分区组成的 经纪人. 每个经纪人都有一个ID标识,可以包含一定的主题分区。

例如2个主题(分别有3个和2个分区)。

经纪人1:

+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|     Topic 2       |
|   Partition 1     |
+-------------------+

经纪人2:

+-------------------+
|      Topic 1      |
|    Partition 2    |
|                   |
|                   |
|     Topic 2       |
|   Partition 0     |
+-------------------+

Broker 3:

+-------------------+
|      Topic 1      |
|    Partition 1    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

请注意,数据是分布式的(并且 经纪人3 不持有任何数据的 专题2).

主题,应该有一个 replication-factor > 1(通常是2或3),这样当一个broker宕机时,另一个broker可以为一个主题的数据服务。例如,假设我们有一个主题,有2个分区,其内容为 replication-factor 设置为2,如下图所示。

经纪人1:

+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

经纪人2:

+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|     Topic 1       |
|   Partition 0     |
+-------------------+

经纪人3:

+-------------------+
|      Topic 1      |
|    Partition 1    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

现在假设 经纪人2 已经失败。经纪人1 和3仍然可以为题目1的数据服务。所以,一个 replication-factor 3个代理总是一个好主意,因为它允许一个代理因维护目的而被关闭,也允许另一个代理意外被关闭。因此,Apache-Kafka提供了强大的耐久性和容错保证。

关于Leaders的说明。在任何时候,只有一个代理可以成为一个分区的领导,并且只有这个领导可以接收和服务该分区的数据。其余的broker只会同步数据(in-synchronic replicas)。另外,请注意,当 replication-factor 设为1,则 魁首 当一个代理失败时,不能移动到其他地方。一般来说,当一个分区的所有副本都失败或离线时,该分区的 leader 将自动设置为 -1.


说到这里,就你的生产者列出了集群中所有Kafka经纪人的地址(bootstrap_servers),你应该没事。即使一个经纪人倒下了,你的制作人也会尝试把唱片写给另一个经纪人。

最后,请确保设置 acks=all (虽然可能会对吞吐量有影响),这样所有同步的副本都会确认他们收到了消息。

© www.soinside.com 2019 - 2024. All rights reserved.