A data packet forwarding method, comprising: collecting, by a source switch according to a preset sampling period, congestion extents of d sampling paths in n paths that are from the source switch to a destination switch, and storing congestion extent indication information that is of each sampling path and that is obtained by means of collection, wherein d is less than n; when forwarding a first data packet of a data stream, selecting, by the source switch from the d sampling paths according to the congestion extent indication information, a first target sampling path with a smallest congestion extent at a first time point, forwarding the first data packet by using the first target sampling path, and storing an identifier of a first data flowcell to which the first data packet belongs; when the source switch forwards a second data packet of the data stream, determining whether an identifier of a second data flowcell to which the second data packet belongs is the same as the identifier of the first data flowcell; and forwarding the second data packet by using the first target sampling path when the identifier of the second data flowcell is the same as the identifier of the first data flowcell; or when the identifier of the second data flowcell is different from the identifier of the first data flowcell, selecting, from the d sampling paths according to the congestion extent indication information, a second target sampling path with a smallest congestion extent at a second time point, and forwarding the second data packet by using the second target sampling path; wherein the first data flowcell comprises at least one data packet, the second data flowcell comprises at least one data packet, the congestion extents are determined by load statuses of switches on the sampling paths. collecting, by a source switch according to a preset sampling period, congestion extents of d sampling paths in n paths that are from the source switch to a destination switch, and storing congestion extent indication information that is of each sampling path and that is obtained by means of collection, wherein d is less than n; when forwarding a first data packet of a data stream, selecting, by the source switch from the d sampling paths according to the congestion extent indication information, a first target sampling path with a smallest congestion extent at a first time point, forwarding the first data packet by using the first target sampling path, and storing an identifier of a first data flowcell to which the first data packet belongs; when the source switch forwards a second data packet of the data stream, determining whether an identifier of a second data flowcell to which the second data packet belongs is the same as the identifier of the first data flowcell; and forwarding the second data packet by using the first target sampling path when the identifier of the second data flowcell is the same as the identifier of the first data flowcell; or when the identifier of the second data flowcell is different from the identifier of the first data flowcell, selecting, from the d sampling paths according to the congestion extent indication information, a second target sampling path with a smallest congestion extent at a second time point, and forwarding the second data packet by using the second target sampling path; wherein the first data flowcell comprises at least one data packet, the second data flowcell comprises at least one data packet, the congestion extents are determined by load statuses of switches on the sampling paths.