卡夫卡经纪人优先

时间:2019-03-19 16:43:58

标签: apache-kafka

如果我具有特定应用程序的EMEA,APAC和NYC实例的全局配置,那么我正在寻找具有区域性Kafka经纪人的公司,这些经纪人都从一个中心的单个主题复制而来,它们都用于输入,另一个用于输出数据。

我想让应用程序的每个区域实例与该区域的经纪人进行通信-因为与伦敦经纪人对话的NYC应用程序会增加很多延迟。

是否可以通过Kafka配置来做到这一点?据我了解,如果您在三个地区的三个经纪人中有一个主题,则一个经纪人将是主要经纪人,而其他经纪人将被复制。

1)尽管这仍然意味着我可以仅连接到本地代理并读取数据,而不必使用其他区域代理,无论本地代理是领导者还是复制者?

2)对于故障转移,例如,如果NYC经纪人崩溃,我希望该应用程序能够作为次要手段,请尝试其他区域之一-尽管如果发生故障,它将希望切换回本地区域它回到了网上。这可能吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

您可以创建一个具有3个分区的主题,并且为每条消息使用不同的键(emeaapacnyc中的一个)以强制将消息放置在根据应用程序的位置进行分区。另外,您可以强制应用程序实例将消息推送到特定分区-例如,在NYC中运行的实例会将消息推送到分区0等。

现在要实现此目的,Replication Tools可能会有用。在Kafka中创建新主题时,只需定义分区数和复制因子,而Kafka会自动处理它们在集群中的分布。不过,您可以使用复制工具强制执行此分配;

  

2.2创建主题
该工具做什么?
默认情况下,如果在网页上将“ auto.create.topics.enable”设置为true,则Kafka会自动创建主题。   服务器。这将创建一个具有默认分区数的主题,   复制因子并使用Kafka的默认方案进行复制   分配。有时,可能需要我们愿意   在创建主题时自定义主题。该工具有助于创建主题   并指定分区数,复制因子和   主题的副本分配列表。

     

如何使用该工具?

# Create topic with default settings
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic topic1

# Create topic with specific number of partitions and/or replicas
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic topic1 --replication-factor 3 --partitions 3


# Create topic with manual replica assignment
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic topic1 --replica-assignment 0:1:2,0:1:2,0:1:2

# Create topic with configuration override
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic topic1 --config min.insync.replicas=1
     

2.3为主题添加分区
  该工具有什么作用?
  在Kafka中,分区充当并行性的单元:单个主题的消息是   分布到可以存储和服务的多个分区   不同的服务器。创建主题后,分区数   为此主题必须指定。以后可能会有更多分区   当该主题的数量增加时,需要此主题。这个   该工具有助于为特定主题添加更多分区,并且允许   手动分配已添加分区的副本。

     

如何使用该工具?

# Increase number of partitions for topic
bin/kafka-topics.sh --alter --zookeeper localhost:2181 --topic topic1 --partitions 4

# Increase number of partitions with specific replica assignment
bin/kafka-topics.sh --alter --zookeeper localhost:2181 --topic topic1 --replica-assignment 0:1:2,0:1:2,0:1:2,2:1:0 --partitions 4

立即回答您的问题;

1)如果--replication-factor设置为1,那么您可以从NYC中的代理读取数据,如果您定义了该代理的主机。如果将--replication-factor设置为3,则可以使用来自任何可用代理的消息。

2)当NYC代理失败时,另一个代理将成为分区负责人。 This is automatically handled by Kafka

  

日志的分区分布在服务器中的服务器上   Kafka集群,每个服务器处理数据和共享请求   的分区。每个分区都在可配置的位置上复制   容错服务器的数量。

     

每个分区都有一个充当“领导者”的服务器,零或   更多充当“追随者”的服务器。领导者处理所有阅读和   跟随者被动地写入分区请求   复制领导者。如果领导者失败,则跟随者之一将   自动成为新的领导者。每个服务器都充当领导者   它的一些分区和其他分区的跟随者,因此负载很好   在集群中保持平衡。