1. Kafka安装前的环境准备在开始安装Kafka之前我们需要确保系统环境满足基本要求。我最近在一台CentOS 7服务器上部署Kafka集群时发现环境配置不当会导致各种奇怪的问题。以下是经过实战验证的环境检查清单1.1 Java环境配置Kafka是基于Java开发的所以Java环境是必须的。推荐使用OpenJDK 8或11版本这两个版本在生产环境中表现最为稳定。可以通过以下命令检查Java版本java -version如果未安装Java可以使用yum快速安装sudo yum install java-1.8.0-openjdk-devel注意虽然Kafka理论上支持Java 11但某些老版本的Kafka在Java 11上可能会有兼容性问题。如果遇到奇怪的问题可以尝试降级到Java 8。1.2 系统资源评估根据我的经验Kafka对系统资源的需求主要取决于消息吞吐量。对于开发测试环境建议至少2核CPU4GB内存50GB磁盘空间SSD最佳生产环境则需要根据预期负载进行调整。我曾经在一个日均处理千万级消息的项目中发现磁盘I/O是主要瓶颈后来改用NVMe SSD后性能提升了3倍。1.3 系统参数调优Linux系统默认参数可能不适合高并发的Kafka服务需要进行一些优化# 增加文件描述符限制 echo * soft nofile 100000 | sudo tee -a /etc/security/limits.conf echo * hard nofile 100000 | sudo tee -a /etc/security/limits.conf # 调整内核参数 echo vm.swappiness 1 | sudo tee -a /etc/sysctl.conf echo net.ipv4.tcp_max_syn_backlog 4096 | sudo tee -a /etc/sysctl.conf sudo sysctl -p这些参数调整可以有效防止在高负载情况下出现Too many open files错误或系统卡死的情况。2. Kafka二进制包下载与解压2.1 版本选择策略Kafka的版本选择需要考虑几个因素与现有系统的兼容性需要的功能特性社区的稳定性反馈目前(2023年)推荐使用2.8.x或3.x系列版本。我最近在三个生产环境项目中使用2.8.1版本稳定性表现良好。可以通过官网下载wget https://downloads.apache.org/kafka/2.8.1/kafka_2.13-2.8.1.tgz提示注意Scala版本号(2.13)和Kafka版本号(2.8.1)的匹配。我曾经因为版本不匹配导致客户端连接问题花了半天时间排查。2.2 解压与目录结构解压下载的压缩包并移动到合适位置tar -xzf kafka_2.13-2.8.1.tgz sudo mv kafka_2.13-2.8.1 /opt/kafkaKafka目录结构说明/opt/kafka ├── bin/ # 各种脚本文件 ├── config/ # 配置文件 ├── libs/ # 依赖库 └── logs/ # 日志文件(启动后生成)我习惯在/opt下创建软链接方便版本管理sudo ln -s /opt/kafka_2.13-2.8.1 /opt/kafka这样未来升级时只需更新软链接指向即可不影响其他配置。3. Kafka基础配置详解3.1 server.properties核心配置Kafka的主要配置文件是config/server.properties。以下是我经过多个项目验证的关键配置项# broker唯一标识集群中不能重复 broker.id0 # 监听地址生产环境建议使用具体IP listenersPLAINTEXT://:9092 # 日志存储目录多个目录用逗号分隔 log.dirs/data/kafka-logs # 默认分区数 num.partitions3 # 日志保留时间(小时) log.retention.hours168 # 日志段文件最大尺寸 log.segment.bytes1073741824 # ZooKeeper连接地址 zookeeper.connectlocalhost:2181重要提示log.dirs配置的目录必须提前创建并设置正确权限否则Kafka启动时会报错但日志不明显。我曾经因此浪费了两小时排查时间。3.2 生产环境优化配置对于生产环境还需要考虑以下配置# 禁用自动创建topic防止意外创建无用topic auto.create.topics.enablefalse # 消息最大尺寸(默认1MB太小) message.max.bytes10485760 # 副本同步设置 default.replication.factor2 min.insync.replicas1 # 网络线程和IO线程数 num.network.threads8 num.io.threads16这些参数需要根据实际硬件配置和业务需求进行调整。在我的一个高并发项目中将num.io.threads从默认的8增加到16后吞吐量提升了约40%。4. Kafka服务启动与管理4.1 启动ZooKeeper服务Kafka依赖ZooKeeper虽然生产环境建议使用独立ZooKeeper集群但开发测试可以使用Kafka自带的简易ZooKeeper/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties检查是否启动成功netstat -tulnp | grep 21814.2 启动Kafka服务使用以下命令启动Kafka/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties验证服务状态# 检查进程 jps -l | grep kafka # 检查端口 netstat -tulnp | grep 90924.3 创建systemd服务(生产环境推荐)为了便于管理可以创建systemd服务文件sudo tee /etc/systemd/system/kafka.service EOF [Unit] DescriptionApache Kafka Server Afternetwork.target zookeeper.service [Service] Typesimple Userkafka Groupkafka ExecStart/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties ExecStop/opt/kafka/bin/kafka-server-stop.sh Restarton-failure [Install] WantedBymulti-user.target EOF然后启用并启动服务sudo systemctl daemon-reload sudo systemctl enable kafka sudo systemctl start kafka这种方式比直接运行脚本更可靠可以自动处理服务崩溃重启和日志收集。5. Kafka基础功能验证5.1 创建测试Topic/opt/kafka/bin/kafka-topics.sh --create \ --bootstrap-server localhost:9092 \ --replication-factor 1 \ --partitions 3 \ --topic test-topic查看Topic详情/opt/kafka/bin/kafka-topics.sh --describe \ --bootstrap-server localhost:9092 \ --topic test-topic5.2 生产消费测试启动控制台生产者/opt/kafka/bin/kafka-console-producer.sh \ --bootstrap-server localhost:9092 \ --topic test-topic另开终端启动消费者/opt/kafka/bin/kafka-console-consumer.sh \ --bootstrap-server localhost:9092 \ --topic test-topic \ --from-beginning在生产者终端输入消息应该能在消费者终端看到相应输出。5.3 常见问题排查连接拒绝检查防火墙设置和listeners配置Topic无法创建检查auto.create.topics.enable设置和ZooKeeper连接消息堆积检查消费者组状态和偏移量提交情况我曾经遇到过一个诡异的问题生产者能发送消息但消费者收不到。后来发现是因为消费者组ID冲突重置消费者组后问题解决。6. Kafka集群部署进阶6.1 多broker集群配置要搭建Kafka集群只需在不同节点上设置不同的broker.id配置相同的zookeeper.connect确保各节点网络互通例如三节点集群配置节点broker.idlistenerskafka11PLAINTEXT://:9092kafka22PLAINTEXT://:9092kafka33PLAINTEXT://:90926.2 副本与ISR机制创建具有副本的Topic/opt/kafka/bin/kafka-topics.sh --create \ --bootstrap-server kafka1:9092 \ --replication-factor 3 \ --partitions 3 \ --topic replicated-topic查看副本分布/opt/kafka/bin/kafka-topics.sh --describe \ --bootstrap-server kafka1:9092 \ --topic replicated-topic输出中的ISR(In-Sync Replicas)列表显示了当前同步的副本。6.3 生产环境注意事项监控使用JMX或Kafka自带指标监控系统健康状态容量规划根据消息保留策略和吞吐量预估磁盘需求安全配置SASL/SSL认证和ACL访问控制备份定期备份关键Topic数据在我的一个金融项目中因为没有配置ACL导致测试环境误删生产Topic造成了严重事故。从此之后我在所有环境都会严格配置访问控制。7. Kafka可视化工具推荐虽然命令行工具功能强大但可视化工具能极大提高效率。以下是我用过的几款优秀工具7.1 Kafka Tool功能全面管理Topic、消费者组、消息浏览等跨平台支持直观的监控图表7.2 Kafdrop轻量级Web UI实时查看消息内容支持多集群管理部署方式docker run -d --name kafdrop \ -p 9000:9000 \ -e KAFKA_BROKERCONNECTkafka1:9092,kafka2:9092,kafka3:9092 \ obsidiandynamics/kafdrop7.3 Offset Explorer详细的消费者组监控消息生产和消费速率统计支持多种认证方式这些工具各有侧重我通常会同时使用Kafdrop和Offset Explorer来满足不同场景需求。8. Kafka性能调优实战8.1 生产者调优关键参数# 批量发送大小(字节) batch.size16384 # 等待时间(毫秒) linger.ms5 # 缓冲区内存(字节) buffer.memory33554432 # 压缩类型 compression.typesnappy在我的测试中调整batch.size和linger.ms可以在延迟和吞吐量之间找到最佳平衡点。8.2 消费者调优# 每次拉取最大字节数 fetch.max.bytes52428800 # 每次拉取最小字节数 fetch.min.bytes1 # 拉取等待时间(毫秒) fetch.max.wait.ms5008.3 broker端调优# 日志刷盘策略 log.flush.interval.messages10000 log.flush.interval.ms1000 # 网络缓冲区 socket.send.buffer.bytes102400 socket.receive.buffer.bytes102400我曾经通过调整socket缓冲区大小解决了跨机房同步时的性能问题吞吐量提升了约30%。9. Kafka与Spring Boot集成9.1 添加依赖dependency groupIdorg.springframework.kafka/groupId artifactIdspring-kafka/artifactId version2.8.3/version /dependency9.2 生产者配置Configuration public class KafkaProducerConfig { Value(${spring.kafka.bootstrap-servers}) private String bootstrapServers; Bean public ProducerFactoryString, String producerFactory() { MapString, Object configProps new HashMap(); configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); return new DefaultKafkaProducerFactory(configProps); } Bean public KafkaTemplateString, String kafkaTemplate() { return new KafkaTemplate(producerFactory()); } }9.3 消费者配置Configuration EnableKafka public class KafkaConsumerConfig { Value(${spring.kafka.bootstrap-servers}) private String bootstrapServers; Bean public ConsumerFactoryString, String consumerFactory() { MapString, Object props new HashMap(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); props.put(ConsumerConfig.GROUP_ID_CONFIG, my-group); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); return new DefaultKafkaConsumerFactory(props); } Bean public ConcurrentKafkaListenerContainerFactoryString, String kafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactoryString, String factory new ConcurrentKafkaListenerContainerFactory(); factory.setConsumerFactory(consumerFactory()); return factory; } }在实际项目中我通常会为不同的业务场景创建多个ConsumerFactory分别配置不同的消费策略。10. Kafka常见问题解决方案10.1 消息顺序性保证Kafka只保证单个分区内消息的顺序性。如果需要全局顺序可以采用以下方案单分区Topic牺牲并行度使用业务键确保相关消息进入同一分区在消费者端实现排序逻辑10.2 消息重复消费常见原因消费者提交偏移量失败后重启消费者处理时间超过session.timeout.ms解决方案实现幂等消费者调整session.timeout.ms和max.poll.interval.ms使用事务消息10.3 磁盘空间不足预防措施设置合理的log.retention.hours监控磁盘使用情况配置自动删除旧日志我曾经遇到过因为日志保留设置不当导致磁盘爆满的情况后来设置了监控告警和自动清理策略。11. Kafka监控与运维11.1 JMX监控启用JMX监控export JMX_PORT9999 /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties关键指标消息入站/出站速率请求处理时间网络线程池状态磁盘I/O情况11.2 日志分析Kafka日志位于logs/目录下重点关注server.log主日志文件controller.log集群控制相关日志state-change.log状态变更日志我通常会配置logrotate自动轮转日志并设置ELK收集分析关键日志。11.3 健康检查脚本#!/bin/bash # 检查Kafka进程 if ! jps -l | grep -q kafka; then echo Kafka process not found exit 1 fi # 检查端口监听 if ! netstat -tulnp | grep -q 9092; then echo Kafka port not listening exit 1 fi # 简单生产消费测试 /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list /dev/null 21 if [ $? -ne 0 ]; then echo Kafka not responding exit 1 fi echo Kafka is healthy exit 0这个脚本可以集成到监控系统中定期检查Kafka服务状态。12. Kafka安全配置12.1 SSL加密生成密钥和证书keytool -keystore server.keystore.jks -alias localhost -validity 365 -genkey keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert配置server.propertieslistenersSSL://:9093 ssl.keystore.location/path/to/server.keystore.jks ssl.keystore.passwordkeystore_password ssl.key.passwordkey_password ssl.truststore.location/path/to/server.truststore.jks ssl.truststore.passwordtruststore_password ssl.client.authrequired12.2 SASL认证配置JAAS文件KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required usernameadmin passwordadmin-secret user_adminadmin-secret; };更新server.propertieslistenersSASL_SSL://:9093 sasl.enabled.mechanismsPLAIN sasl.mechanism.inter.broker.protocolPLAIN security.inter.broker.protocolSASL_SSL12.3 ACL访问控制启用ACLauthorizer.class.namekafka.security.auth.SimpleAclAuthorizer allow.everyone.if.no.acl.foundfalse设置Topic权限/opt/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connectlocalhost:2181 \ --add --allow-principal User:alice \ --operation Read --topic test-topic在实际项目中我通常会结合公司LDAP系统实现统一的权限管理简化用户和权限维护工作。13. Kafka与周边生态集成13.1 Kafka ConnectKafka Connect是Kafka与其他系统集成的框架。安装方式/opt/kafka/bin/connect-distributed.sh /opt/kafka/config/connect-distributed.properties常用连接器JDBC Source/Sink数据库集成Elasticsearch Sink导入到ESFile Source/Sink文件系统集成13.2 Kafka StreamsKafka Streams是构建流处理应用的库。基本使用StreamsBuilder builder new StreamsBuilder(); KStreamString, String source builder.stream(input-topic); source.mapValues(value - value.toUpperCase()) .to(output-topic); KafkaStreams streams new KafkaStreams(builder.build(), props); streams.start();13.3 ksqlDBksqlDB是面向Kafka的流式SQL引擎CREATE STREAM pageviews (viewtime BIGINT, userid VARCHAR, pageid VARCHAR) WITH (KAFKA_TOPICpageviews, VALUE_FORMATJSON); CREATE TABLE user_profiles (userid VARCHAR PRIMARY KEY, firstname VARCHAR, lastname VARCHAR) WITH (KAFKA_TOPICusers, VALUE_FORMATJSON, KEY_FORMATKAFKA);这些工具极大地扩展了Kafka的应用场景我在多个数据管道项目中成功应用了它们。14. Kafka性能基准测试14.1 生产者性能测试/opt/kafka/bin/kafka-producer-perf-test.sh \ --topic perf-test \ --num-records 1000000 \ --record-size 1000 \ --throughput -1 \ --producer-props bootstrap.serverslocalhost:9092 \ batch.size16384 linger.ms1 compression.typenone关键指标吞吐量(records/sec)延迟(ms)带宽(MB/sec)14.2 消费者性能测试/opt/kafka/bin/kafka-consumer-perf-test.sh \ --topic perf-test \ --bootstrap-server localhost:9092 \ --messages 1000000 \ --group perf-consumer14.3 测试结果分析在我的测试环境中(4核CPU16GB内存SSD)典型性能数据场景吞吐量平均延迟备注无压缩85,000 msg/s2ms单生产者Snappy压缩65,000 msg/s3msCPU成为瓶颈3副本同步45,000 msg/s5ms网络开销明显这些数据可以帮助合理规划生产环境的资源配置和性能预期。15. Kafka版本升级策略15.1 滚动升级步骤停止一个broker更新软件版本启动新版本broker重复以上步骤直到所有节点升级升级客户端库版本15.2 兼容性检查协议版本兼容性消息格式兼容性ZooKeeper版本要求客户端库版本要求15.3 回滚方案备份配置和数据记录当前偏移量准备旧版本二进制包测试回滚流程我曾经负责过一个从1.1.1升级到2.5.0的项目整个过程持续了两周期间发现了多个兼容性问题最终通过分阶段升级解决了所有问题。16. Kafka在微服务架构中的应用16.1 事件驱动架构Kafka非常适合作为事件总线的实现典型模式事件通知事件溯源CQRS模式16.2 服务解耦案例在一个电商系统中我们使用Kafka解耦了以下服务订单服务发布订单创建事件库存服务订阅事件并扣减库存物流服务订阅事件并生成运单通知服务订阅事件并发送通知这种架构使各服务可以独立开发部署大大提高了系统灵活性。16.3 事务消息处理使用Kafka事务API确保跨服务操作的原子性Bean public ProducerFactoryString, String producerFactory() { MapString, Object configProps new HashMap(); configProps.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, tx-1); // 其他配置... return new DefaultKafkaProducerFactory(configProps); } Transactional public void processOrder(Order order) { // 数据库操作 orderRepository.save(order); // Kafka消息发送 kafkaTemplate.send(orders, order.getId(), order.toString()); }这种模式在需要保证数据库和Kafka操作一致性的场景非常有用。17. Kafka资源规划建议17.1 磁盘容量计算计算公式所需磁盘空间 每日消息量 × 平均消息大小 × 保留天数 × 副本因子 × 1.2(预留空间)示例每日1000万条消息平均每条1KB保留7天3副本计算 10,000,000 × 1KB × 7 × 3 × 1.2 ≈ 252GB17.2 网络带宽估算计算公式所需带宽 峰值消息速率 × 平均消息大小 × 副本因子示例峰值1000条/秒平均1KB/条3副本计算 1000 × 1KB × 3 3000KB/s ≈ 24Mbps17.3 内存配置建议堆内存不超过6GB(避免GC停顿过长)页面缓存尽可能多的空闲内存用于文件缓存避免swap设置vm.swappiness1在我的经验中过度分配堆内存反而会降低性能因为GC停顿时间会显著增加。18. Kafka与Docker集成18.1 单节点Docker部署docker-compose.yml示例version: 3 services: zookeeper: image: confluentinc/cp-zookeeper:6.2.0 environment: ZOOKEEPER_CLIENT_PORT: 2181 kafka: image: confluentinc/cp-kafka:6.2.0 depends_on: - zookeeper ports: - 9092:9092 environment: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 118.2 多节点集群部署扩展docker-compose.ymlkafka1: image: confluentinc/cp-kafka:6.2.0 environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092 kafka2: image: confluentinc/cp-kafka:6.2.0 environment: KAFKA_BROKER_ID: 2 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:909218.3 生产环境注意事项使用host网络模式提高性能挂载数据卷持久化数据配置资源限制(CPU/内存)设置健康检查我曾经在Kubernetes上部署Kafka集群发现默认的网络策略会导致broker间通信问题后来通过配置自定义网络策略解决了这个问题。19. Kafka最佳实践总结19.1 Topic设计原则按业务领域划分Topic合理设置分区数(开始可以按broker数量×2)明确消息键的使用策略规划好消息保留策略19.2 生产者最佳实践合理设置批处理参数实现错误处理逻辑监控发送延迟考虑幂等生产者19.3 消费者最佳实践正确处理重平衡管理好偏移量提交处理死信消息监控消费延迟19.4 集群运维建议定期监控磁盘使用滚动重启应用补丁保留足够的监控历史数据建立完善的告警机制经过多个Kafka项目的实践我发现良好的监控和告警系统可以预防80%的生产问题而合理的容量规划可以避免另外15%的问题。
企业数字化 ERP 产品动态
相关推荐
Ubuntu FreeRADIUS EAP-TLS 双向认证配置与排错 简介:面向在 Ubuntu 上搭建 802.1X EAP-TLS 双向认证测试环境的网络实验人员与运维学习者,这份文档围绕 FreeRADIUS 的部署、证书生成与终端接入验证展开,适合需要复现企业级无线认证流程的初中级读者。压缩包共 1 个 docx 文件,约… · 2026/11/3 19:41:27
深度学习在旅游推荐系统中的应用与实践 1. 项目概述 这个基于深度学习的旅游推荐系统是我在2019年完成的一个实战项目,核心思路是利用Django框架搭建Web应用,结合深度学习算法为用户提供个性化的旅游目的地推荐。当时市面上大多数旅游网站还停留在基于规则或简单协同过滤的推荐方式,… · 2026/11/3 19:41:27
FreeRADIUS EAP-TLS 双向认证与802.1X无线接入实战 简介:针对 Ubuntu 系统下用 Freeradius 搭建 802.1X EAP-TLS 双向认证测试环境编写的实操文档,面向无线网络认证初学者、企业网络运维人员以及需要验证终端证书接入的设备测试人员,可帮助解决证书签发、服务端参数配置与终端接入联调中的常见… · 2026/11/3 19:41:27
macOS Node.js 多版本管理:nvm 配置与环境变量避坑指南 1. 为什么 macOS 上的 Node.js 环境总在“反复重装”?——nvm 是唯一解法你有没有过这样的经历:在 macOS 上装完 Node.js,跑几个项目没问题,可一换项目版本,或者某天终端突然报错command not found: node,再… · 2026/11/3 20:17:49
BI实施方法论:从决策场景到指标口径与数据分层落地 简介:这份文档面向企业BI项目负责人、数据分析师与信息化实施人员,系统梳理商务智能从立项到运营的完整方法论,帮助团队解决目标不清、数据质量不稳、需求与开发脱节及上线后价值难评估等问题。压缩包仅含1个docx文件,约108KB&… · 2026/11/3 20:17:49
K/3 Cloud BOS插件开发入门:环境配置、生命周期与实战避坑 简介:面向K/3 Cloud BOS插件开发初学者的入门文档,围绕BOS产品应用汇总这一主题,帮助刚接触金蝶BOS平台的开发者厘清插件开发的环境门槛与整体架构认知。内容从团队服务器、数据库服务器、客户端与Web服务器的配置基准讲起,说明Vi… · 2026/11/3 20:17:49
Redis在Linux下的安装部署与性能优化指南 1. Redis简介与Linux环境准备 Redis作为当下最流行的开源内存数据库,凭借其超高的读写性能和丰富的数据结构,已经成为互联网应用中缓存、会话存储、消息队列等场景的首选方案。根据DB-Engines最新排名,Redis在键值存储领域连续多年稳居第一。… · 2026/11/3 20:17:49
ChatGPT大模型:decoder-only、指令微调与RLHF工程取舍 简介:哈尔滨工业大学自然语言处理研究所于2023年3月6日发布的ChatGPT调研报告,全文94页,面向自然语言处理学习者、算法与产品从业者以及关注大模型技术演进的研究人员,帮助读者在较短时间内建立对ChatGPT技术脉络、应用边界与产业… · 2026/11/3 20:17:49
Prompt-Tuning与PVP:小样本参数高效微调实战解析 简介:《Prompt-Tuning:深度解读一种全新的微调范式》是一份面向NLP研究者、算法工程师与大模型应用开发者的综述型PDF,聚焦预训练语言模型向AIGC演进中的高效微调问题。内容从BERT、GPT到BART、T5、GPT-4梳理语言模型三阶段发展,并… · 2026/11/3 20:16:47
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46