apache为啥不能运行?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apache为啥不能运行?相关的知识,希望对你有一定的参考价值。
第一步:控制面板——系统和安全——更改用户账户控制设置——从不通知第二步:
安装完apache之后(不是按照默认路径安装的,我的是 D:\ )右下方哪个小羽毛图标是没有启动的,左键不好使,而且提示“No services installed”,提示服务器没有被安装。
解决方法: 找到 apache2.2 目录下的 bin 目录 有个apache.exe 文件,我们在运行中键入: cmd 出来DOS窗口,
键入: d:\ 注释:进入D盘,由于我的apache安装在D盘
键入: cd apache2.2 注释:进入D:\apache2\目录
键入: cd bin 注释:进入D:\apache2.2\bin\ 目录
键入: httpd.exe -k install -n apache2.2 注释:添加了apache这个服务了,下面我们要启动它
键入: net start apache2.2 注释:启动apache2服务 关闭服务器是:net stop apache2.2
OK,问题解决
注意! 删除 apache 服务可用如下语句:
sc delete apache2.2
小技巧:
把下面的语句保存为.bat文件形式,放在桌面上,当双击它就可起到“重启Apache服务”的作用:
net stop apache2.2
net start apache2.2 参考技术A apache是服务器软件,运行的默认端口是80。
若是出现安装正常,但是运行不成功的话,可能就是端口80被占用导致,解决方案找到80是被哪个软件占用,若是没用删除;若是找不到或者是有用的话,修改apache的端口号,步骤如下:
1.找到httpd.conf
2.文件中找到 Listen 80 === > Listen 8080
3.重启apache
4.注意浏览器访问时,localhost:8080 参考技术B 软硬件的发噶追问
什么?
在 Apache Kafka 中,为啥不能有比分区更多的消费者实例?
【中文标题】在 Apache Kafka 中,为啥不能有比分区更多的消费者实例?【英文标题】:In Apache Kafka why can't there be more consumer instances than partitions?在 Apache Kafka 中,为什么不能有比分区更多的消费者实例? 【发布时间】:2014-11-11 19:36:04 【问题描述】:我正在学习 Kafka,在这里阅读介绍部分
https://kafka.apache.org/documentation.html#introduction
特别是关于消费者的部分。在引言的倒数第二段中写道
卡夫卡做得更好。通过在主题中拥有并行性(分区)的概念,Kafka 是 能够在消费者进程池上提供排序保证和负载平衡。这 是通过将主题中的分区分配给消费者组中的消费者来实现的 每个分区仅由组中的一个消费者使用。通过这样做,我们确保 消费者是该分区的唯一读取者,并按顺序使用数据。由于有很多 分区这仍然平衡了许多消费者实例的负载。但是请注意,不能 消费者实例多于分区。
我的困惑源于最后一句话,因为在该段落正上方的图片中,作者描述了两个消费者组和一个 4 分区主题,消费者实例比分区多!
消费者实例不能多于分区也是没有意义的,因为分区会非常小,而且为每个消费者实例创建新分区的开销似乎会使 Kafka 陷入困境。我知道分区用于容错和减少任何一台服务器上的负载,但是上面的句子在应该能够同时处理数千个消费者的分布式系统的上下文中没有意义。
【问题讨论】:
【参考方案1】:让我们这样想,我们知道消费者组可以订阅多个主题,对吧?在这里,我们也可以假设它订阅的每个主题都有不同的编号。分区,有可能吧?
现在,在这种情况下,没有。实例等于没有。分区规则不能应用于所有主题,因为每个主题都假定有不同的编号。分区,对吧?因此,对于同一个消费者组,我们将 i == p 用于某个主题,i p 用于某个主题。
换句话说,理想情况下,您至少希望没有。消费者组中的实例数等于否。主题中的分区,但如果您最终拥有更多实例,那么它不会失败或造成伤害,即对于该主题,额外的实例将保持空闲状态。
例子:
主题 A 有 2 个分区
主题 B 有 3 个分区
具有 3 个实例的消费者组
A[1 2] B[1 2 3]
[x y z] (consumer group)
现在,对于主题“B”,所有 3 个消费者实例都将处于活动状态(每个从 1 个分区读取),但是,对于主题“A”,只有 3 个消费者实例中的任何 2 个将处于活动状态(即其中 1 个将是空闲,因为主题只有 2 个分区)。
【讨论】:
@anonymous 请提供 (-1) 的理由,以便帮助我(每个人)理解您对给定答案/解释的担忧?【参考方案2】:Kafka 消费者组模型是一种混合的队列机制,其中一个消费者实例读取的消息会立即从队列中删除,而发布/订阅机制则在设置保留期或到期之前不会删除消息,并且在到期之前,所有消费者实例都可以使用。因此,如果您有一个要使用发布/订阅模型的用例,但又想将其用作排队机制,您可以为所有消费者实例创建消费者组。鉴于 Kafka 在单个消费者组内的消费者实例之间分配分区,可以保证 1 条消息只处理一次。如果 Kafka 允许您在单个消费者组中拥有更多消费者实例,那么它就超出了拥有消费者组的目的。
考虑这个例子:
REST API pub1 向 topic1 发布了 4 条消息,该 topic1 有 4 个分区 part1 到 part4,因此每个部分都有 1 条消息。
您有 2 个微服务 sub1 和 sub2 作为订阅者,每个微服务有 4 个实例在运行。
现在,如果您创建 2 个使用者组,每个 miroservice 一个 sub1instance1 将映射到 part1,sub1instance2 将映射到 part2,以此类推 同样 sub2instance1 会映射到 part1,sub2instance2 会映射到 part2 等等。
只要您在每个消费者组中的消费者实例小于或等于分区数,您的每个微服务实例将只处理一次消息。在这种情况下,sub1instance1 和 sub2instance 将处理来自 part1 的 msg1。
如果消费者实例多于分区,则 Kafka 必须将相同的分区分配给多个消费者实例,以便映射到该分区的每个消费者实例多次处理消息。这就是为什么 Kafka 阻止我们在一个消费者组中拥有比消费者组订阅的主题中的分区数量更多的消费者实例的原因。
希望这是有道理的。
【讨论】:
确实有道理。我想知道为什么这个答案没有足够的支持。 我的 4 个微服务实例是否都具有相同的消费者 ID?【参考方案3】:在 Kafka 中,只有一个消费者实例可以消费来自分区的消息。如果消费者实例多于分区,则不会使用额外的消费者实例。所以 kafka 不允许这些额外的消费者实例。
现在,如果多个消费者可以消费分区,那么消息消费不会有任何顺序。这就是为什么 kafka 不允许每个分区有多个消费者的原因
【讨论】:
【参考方案4】:重要的是要记住,Kafka 为每个 [consumer-group、topic、partition] 保留一个偏移量。这就是原因。
我猜这句话
但是请注意,消费者实例不能多于分区。
指的是“自动消费者组重新平衡”模式,当您只需 subscribe() 一些消费者到主题列表时的默认消费者模式。
我假设因为,至少在 Kafka 0.9.x 中,没有什么可以阻止多个消费者实例、同一组的成员从同一分区读取数据。
你可以在两个或更多不同的线程中做这样的事情
Properties props = new Properties();
props.put(ConsumerConfig.GROUP_ID_CONFIG, "MyConsumerGroup");
props.put("enable.auto.commit", "false");
consumer = new KafkaConsumer<>(props);
TopicPartition partition0 = new TopicPartition("mytopic", 0);
consumer.assign(Arrays.asList(partition0));
ConsumerRecords<Integer, String> records = consumer.poll(1000);
您将有两个(或更多)消费者从同一个分区读取数据。
现在,“问题”是两个消费者将共享相同的偏移量,您没有其他选择,因为只有一个组、主题和分区在起作用。
如果两个消费者同时读取当前偏移量,那么他们都会读取相同的值,并且他们都会收到相同的消息。
如果您希望每个消费者读取不同的消息,则必须同步它们,以便同时只有一个可以获取并提交偏移量。
【讨论】:
【参考方案5】:Kafka 不能支持每个分区多个消费者是有原因的。
Kafka 代理将数据写入每个分区的文件。所以假设如果配置了两个分区,broker 将创建两个文件并分配多个可以发送消息的消费者组。
现在对于每个分区,只有一个消费者根据文件的偏移量消费消息。例如,消费者 1 将首先从文件偏移量 0 到 4096 读取消息。现在这些偏移量是有效负载的一部分,因此消费者将知道在请求读取下一条消息时使用哪个偏移量。
如果多个消费者正在从同一个分区读取,那么消费者 1 从偏移量 0-4096 的文件中读取,但消费者 2 仍会尝试从偏移量 0 读取,除非它也收到发送给消费者 1 的消息。 现在,如果将相同的消息发送给多个消费者,则不是负载均衡,因此 Kafka 将它们划分为消费者组,以便所有消费者组都可以接收消息,但在消费者组内,只有一个消费者可以接收消息。
【讨论】:
你说 Kafka 每个分区不能有多个消费者。如果 C1 和 C2 来自不同的消费者组,他们可以从同一个分区读取吗?我认为他们必须能够,否则 Kafka 正在有效地使用独占消费者(对特定分区独占)方法,而您不会获得负载平衡。听听 Kafka 实际在做什么来区分来自不同消费者群体的消费者,这将非常有帮助。此外,由于 Kafka 将数据写入磁盘,如果写入不再是线性的,那么来自不同组的多个消费者似乎真的很慢。【参考方案6】:好的,要理解它,需要理解几个部分。
-
为了提供订购总订单,消息只能发送给一个消费者。否则效率会非常低,因为它需要等待所有消费者收到消息,然后再发送下一条消息:
但是,虽然服务器按顺序分发消息,但消息是异步传递给消费者的,因此它们可能会乱序到达不同的消费者。这实际上意味着消息的顺序在并行消费的情况下会丢失。消息传递系统通常通过“独占消费者”的概念来解决这个问题,该概念只允许一个进程从队列中消费,但这当然意味着处理过程中没有并行性。
卡夫卡做得更好。通过在主题中拥有并行概念(分区),Kafka 能够在消费者进程池上提供排序保证和负载平衡。这是通过将主题中的分区分配给消费者组中的消费者来实现的,以便每个分区仅由组中的一个消费者使用。通过这样做,我们确保消费者是该分区的唯一读取者并按顺序使用数据。由于有许多分区,这仍然可以平衡许多消费者实例的负载。但请注意,消费者实例的数量不能多于分区。
Kafka 仅提供分区内消息的总顺序,而不是主题中不同分区之间的总顺序。
此外,您认为的性能损失(多个分区)实际上是性能提升,因为 Kafka 可以完全并行执行不同分区的操作,同时等待其他分区完成。
-
图片展示了不同的消费者组,但每个分区最多有一个消费者的限制仅在一个组内。您仍然可以拥有多个消费者组。
一开始描述了两个场景:
如果所有消费者实例都有相同的消费者组,那么这就像传统的队列平衡消费者负载一样。
如果所有消费者实例都有不同的消费者组,那么这就像发布-订阅一样,所有消息都广播给所有消费者。
因此,您拥有的订阅者组越多,性能越低,因为 kafka 需要将消息复制到所有这些组并保证总顺序。
另一方面,您拥有的组越少,分区越多,您从并行化消息处理中获得的收益就越多。
【讨论】:
所以可以通过以下说明来回答这个问题:单个消费者组内的消费者实例不能多于分区数。 @peter "虽然服务器按顺序发送消息":kafka 服务器如何将消息发送给消费者。我在想,由于偏移量是由消费者维护的,消费者从 kafka 主题中提取消息。还是像消费者告诉kafka直到它读到哪里,然后kafka将数据推送给消费者。我真正的问题是,是否基于 kafka 推送?还是基于拉取? @peter 不错的答案,但有一个重要的事情没有解决。如果我们希望每个消费者只有一个分区怎么办?这意味着组内的分区和消费者数量相等(如果 Kafka 进行了适当的平衡,并且确实如此)。好的,现在我们还想确保即使某些消费者实例失败,每个消费者实例仍然有一个分区。这样做的合乎逻辑的方法是向组中添加更多的消费者;虽然一切正常,但他们不会做任何事情,但是当一些消费者失败时,其中一个会收到该分区。为什么不允许这样做? @peter "所以,你拥有的订阅者组越多,性能越低,因为 kafka 需要将消息复制到所有这些组并保证总顺序。"在这种情况下,延迟与消费者群体的数量相关是线性的还是次线性的? @Miljen Mikic 就是这样,多个消费者保持冗余,在主消费者失败的情况下,其他消费者将被随机分配到相应的分区。以上是关于apache为啥不能运行?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能将 apache.thrift 导入 IntelliJ 项目?
为啥我的 React 应用程序不能使用我的 Apache .htaccess 文件来防止 404?